我们的应用程序是基于ExtJS 3.4的应用程序,我们经常得到" 通信失败" UI上的错误,我们将我们的应用程序部署在不同的域上但在某些域上我们经常得到这个。
没有HTTP Keep Alive我们没有收到该错误。:
但在1秒和5秒的不同情况下,我们经常得到它。
我们观察到Wireshark是由于高RTT(往返时间),请求所花费的时间超过预期。 方案流中的数据包流不一致:
如果活着是5秒:
当请求成功提供时,它将返回200 OK(成功响应)和5秒的超时参数(服务器试图向客户端说服务器将在关闭此连接之前等待5秒)。
现在只要经过5秒的时间,服务器就会发送一个FIN数据包(完成数据包,它将关闭连接从服务器发送到客户端,在我们的例子中是浏览器)。
现在这里是ACK(确认数据包)从客户端到关闭连接所用的时间很长(高RTT)。
现在服务器已启动关闭,但由于高RTT,在连接关闭之前,客户端在服务器收到客户端的FINISH ACK之前发送新的HTTP请求(例如ExampleABC.do请求)。
由于已启动连接关闭,因此哪个服务器无法处理该请求。
设置为1秒保持活动意味着我们正在减少服务器等待关闭连接的时间,因为我们想要在1秒后关闭一个连接并为新请求设置新连接以避免在5秒后发出不需要的请求。
提前致谢 这是我的第一篇帖子请在需要时纠正我。 抱歉英文不好:)
通讯失败的图片
答案 0 :(得分:0)
我们通过同步浏览器超时和服务器超时来解决此问题。
解决方法是确保TCP保持活动时间和浏览器一致或同时出现,从而导致TCP连接完全断开。