记一个在线异常的想法[HTTP]后台支付时向频道发起请求时,偶尔会出现NoHttpResponseException,频率不高,没有规律可循。异常请求重试后,数据正??常。这可以排除是业务代码问题,问题可能出现在HttpClient的应用上。简要分析及解决方案长连接在项目中的应用可以回顾一下:HTTPkeep-alive一般我们会在中间带一个单杠。对于普通的HTTP连接,客户端连接服务器,请求结束后,客户端或服务器关闭http连接。下次发送请求时,客户端发起连接,传输数据,关闭连接。重复这个过程。但是一旦客户端发送connection:keep-aliveheader给服务端,并且服务端也接受了keep-alive,这个连接就可以重用了。处理完一个HTTP后,另一个HTTP数据包也直接从该连接发送。减少创建和断开TCP连接的消耗。
TCP的keepalive侧重于维护客户端和服务器之间的连接。一方会不定时地向另一方发送心跳包。如果间隔多次发送,对方返回RST而不是ACK,则释放当前连接。从HTTP长连接和TCP长连接可以推断,客户端刚刚获得HTTP连接,服务端TCP检测到长时间没有通信端口打开TCP。断开连接后,HTTP请求将被拒绝,从而引发NoHttpResponseException。异常复现:程序获取到连接后,调用之前的断点(建立长连接后),等待服务器TCP断开,然后触发调用,可以看到抓取到的数据(192.是本地的)(172.*是Remote),如果一段时间没有TCP通信,远程服务器会断开TCP解决方案,通过补偿机制重试:
