我正在使用的库出现问题。可能是图书馆的问题,也可能是我用错了!
基本上,当我这样做时(以毫秒为单位的超时)
_ignitedHttp.setConnectionTimeout(1); // v short
_ignitedHttp.setSocketTimeout(60000); // 60 seconds
没有产生超时异常,它工作正常,但是,当我执行以下操作时,
_ignitedHttp.setConnectionTimeout(60000); // 60 seconds
_ignitedHttp.setSocketTimeout(1); // v short
我得到一个Socket异常。
那么,我的问题是为什么我不能模拟连接异常?我是否误解了套接字和连接超时之间的区别?该库是here(尚未正式发布)。
2条答案
按热度按时间7uhlpewt1#
连接超时仅在启动TCP连接时发生。这通常发生在远程机器没有应答的情况下。如果您收到ConnectException,可能的原因是:服务器已关闭,您使用了错误的IP/DNS名称,错误的端口或到服务器的网络连接已关闭。
socket timeout专用于监控连续传入的数据流。如果数据流中断了指定的时间,则连接被视为停止/断开。当然,这只适用于一直接收数据的连接,并且没有比配置的套接字超时更长的延迟。
通过将套接字超时设置为1000,这将要求每秒接收一次新数据(假设您读取数据块并且块足够大)。
如果只有传入流停顿超过一秒,则您遇到了超时。
当HTTP服务器处理一个复杂的请求时,这一点尤其重要,因为在HTTP响应数据可用之前,服务器端需要一些时间。如果您将套接字超时配置为10000(10秒),但HTTP服务器在收到HTTP请求后需要15秒,那么您将永远不会收到响应,因为10秒后您将收到SocketTimeoutException(在HTTP请求的接收之间没有数据传输,直到HTTP响应就绪)。
2skhul332#