前言
TCP代理的使用场景有很多,比如Nginx的http代理,本质上也是TCP的转发,微服务网格istio的Envoy也是基于这种理念来实现的。
之所以写这个demo,是为了可以很方便地调试上下游服务在通信过程中到底传递了什么数据,对各种协议的通信方式可以很快的掌握它们原理,比如rpc通信、http通信、grpc通信等等。
代码路径:http://gitee.com/zqwlai/go-test/tcpProxy.go
简单说下原理,proxy在收到下游的请求后,会建立一个conn1,此时proxy会解析conn1里面的目标地址,并与之建立TCP连接conn2, 接下来会开启两个协程,一个用来从conn1里读取请求报文,并将报文发给conn2,另一个协程从conn2读取响应数据,并写到conn1返回给上游。