我似乎遇到了一些tcp请求有时被“卡住”的问题,比如它正在等待某些响应,但连接已被“切断”,因此响应永远不会到来. HttpURLConnection的预期行为是否具有默认超时?是否设置了合理的默认设置,以便我无法默认进入这种奇怪的“挂起”状态?
解决方法:
出现HttpURLConnection的“默认”超时为零,这意味着“没有超时”.
不幸的是,根据我的经验,使用这些默认设置似乎会导致状态不稳定,具体取决于您与服务器的连接发生的情况.如果您使用HttpURLConnection并且未显式设置(至少读取)超时,则您的连接可能会进入永久陈旧状态.默认.所以总是将setReadTimeout设置为“something”,或者你可能孤立连接(可能还有线程,具体取决于你的app运行方式).
从试验和错误看,调用setConnectTimeout不是必需的,因为套接字本身似乎内置了2分钟的“连接超时”(至少在OS X中).
您也可以通过调整system properties为超时设置“全局默认值”.
修复/预测:始终设置readTimeout(即使非常大),或使用允许您设置SO_KEEPALIVE的其他客户端.默认情况下可能导致程序“永远”挂起而没有它.
标签:java,httpurlconnection 来源: https://codeday.me/bug/20191001/1837696.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。