Open jaejaking opened 1 year ago
从请求过程(4次挥手)来看,既然服务端出现了TIME_WAIT,说明了服务断开是服务器发起的,也就是说代理是被迫断开的。所以应当代理在处理完本次请求后,应当主动断开本次连接。
所以现在问题应该是在后端服务主动关闭TCP连接的时候代理服务没有处理吗
不好意思,重新补充回复一下,我用的是postman测试的,所以才会出现我截图描述的这一堆问题,但是Apipost没出现类似问题,您看看这些发现对您有帮助吗?
所以现在问题应该是在后端服务主动关闭TCP连接的时候代理服务没有处理吗
我用的InterceptHttpProxyServer跑的程序,里面加了两行打印,某次测试时发现只打印了请求,没有回复的消息,如下图:
所以我又仔细测试了一下,
客户端ip:192.168.1.20,
服务端IP:192.168.1.52,
服务端端口:10222,
测试方法:postman通过proxyee访问服务端接口。
发现当proxyee访问了一次服务端接口之后,这次是成功的,此时服务端和客户端的TCP连接状态都是ESTABLISHED,说明正常通信;期间不再进行接口访问。
等待大约1分钟,通过netstat命令发现客户端已没有和10222创建的TCP连接,此时在服务端利用netstat发现刚刚的TCP连接变为TIME_WAIT状态(该状态会维持1分钟),说明客户端和服务器断开连接。
在服务端TCP处于TIME_WAIT的时候,用postman通过proxyee再请求服务端,此时proxyee与服务器连接不上!具体如下图:
但如果再次重新利用postman发起请求,就可以连接上(也就是说在服务端TIME_WAIT之后的第一次连接是连接不上的),此时看服务端的TCP状态,发现他新建了一个TCP连接(此连接可以正常通信),原先的连接仍然处于TIME_WAIT状态,如下图:
请教一下大神,这是为什么?该如何解决 @monkeyWie @er1c @xyzj91 @smichea