本文转载自微信公众号《JeffckyShare》,作者Jeffcky。转载本文请联系JeffckyShare公众号。接下来,我们结合以下两条异常信息进行普查分析。这两个异常信息什么时候会抛出呢?异常信息分析上面的异常到底是连接问题导致的,但是连接超时的情况有很多,比如客户端主动关闭连接,比如服务端响应请求超时等,这里介绍常见的我个人理解的情况,大家可以作为一个基本的参考。第一个因素是正确观察数据量的大小。万一数据量偶尔达到M级,当然,既然考虑到HTTP,这种情况基本可以忽略。二是HTTP是否还能承载相应的业务,消除性能瓶颈。三是,评估考虑是否增加自己平台的请求超时设置?同时也清楚自己的平台是否有非常频繁的请求?而且您还必须知道对接方是否有耗时的处理请求?首先,如果以上都不是,可以从网络原因找出原因开始分析,比如防火墙设置(根据不同的操作系统,采取相应的解决方案),DNS解析设置(带参数可以配置刷新DNS解析)、IP设置、代理设置(带参数可以配置忽略代理)等。其次,确保客户端开启结束持久连接,增加连接数限制//增加keep-alive机制,表示该连接为长连接,设置keep-alive时间间隔为1秒。)ServicePointManager.SetTcpKeepAlive(true,7200000,1000);//默认连接限制为2,增加连接限制ServicePointManager.DefaultConnectionLimit=512;然后,还是不能解决问题,尝试使用Socket通讯连接varclient=newHttpClient(newSocketsHttpHandler(){//考虑忽略代理UseProxy=false,//考虑增加连接数,配置MaxConnectionsPerServer=100,//考虑忽略重定向响应AllowAutoRedirect=false,//考虑忽略SSL证书验证SslOptions=newSslClientAuthenticationOptions(){RemoteCertificateValidationCallback=(sender,certificate,chain,sslPolicyErrors)=>true},//考虑数据压缩设置AutomaticDecompression=DecompressionMethods.Deflate|DecompressionMethods.GZip,}){BaseAddress=newUri(""),Timeout=TimeSpan.FromSeconds(30),};最后,问题无法解决。如果Windows使用WireShark抓包分析,如果Linux使用tcpdump抓包,如果结合WireShark分析基本排除了其他干扰因素,通过WireShark抓包一切正常,可以吗?更自信更合适你怀疑HttpClient本身可能有这样的问题吗?考虑分别在Windows和Linux系统上测试验证,最后确认两个系统上的HttpClient底层机制是否有些不同,导致存在的bug?
