gpt4 book ai didi

java - ConnectionTimeout 与 SocketTimeout

转载 作者:行者123 更新时间:2023-12-02 03:19:00 26 4
gpt4 key购买 nike

我正在使用的库有问题。可能是库的问题,也可能是我使用错误!

基本上,当我这样做时(超时以毫秒为单位)

_ignitedHttp.setConnectionTimeout(1);  // v short
_ignitedHttp.setSocketTimeout(60000); // 60 seconds

没有生成超时异常并且工作正常,但是,当我执行以下操作时,

_ignitedHttp.setConnectionTimeout(60000);  // 60 seconds
_ignitedHttp.setSocketTimeout(1); // v short

我收到套接字异常。

所以,我的问题是为什么我不能模拟连接异常?我是否误解了套接字和连接超时之间的区别?图书馆是here (尚未正式发布)。

最佳答案

仅在启动 TCP 连接时才会发生连接超时。如果远程计算机没有应答,通常会发生这种情况。如果您收到 ConnectException,可能的原因是:服务器已关闭、您使用了错误的 IP/DNS 名称、错误的端口或与服务器的网络连接已关闭。

套接字超时专用于监视连续传入的数据流。如果数据流中断指定时间,则连接被视为停止/断开。当然,这只适用于始终接收数据并且延迟时间不超过配置的套接字超时的连接。

通过将套接字超时设置为 1000,这将要求每秒接收一次新数据(假设您以 block 方式读取数据并且 block 足够大)。

如果只有传入流停止超过一秒,您就会遇到超时。

当 HTTP 服务器处理复杂的请求(需要在服务器端花费一些时间才能获得 HTTP 响应数据)时,这一点尤其重要。如果您将套接字超时配置为 10000(10 秒),但 HTTP 服务器在收到 HTTP 请求后需要 15 秒,那么您将永远不会收到响应,因为 10 秒后您将收到 SocketTimeoutException(在接收 HTTP 请求之间没有数据传输)请求直到 HTTP 响应准备好)。

关于java - ConnectionTimeout 与 SocketTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56940220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com