gpt4 book ai didi

java - 当客户端使用 readTimeout 关闭连接时服务器会发生什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:44:43 27 4
gpt4 key购买 nike

当客户端使用 readTimeout 关闭与 API 的连接时,服务器会发生什么。请求的执行将完成还是一旦超时发生就会中断,或者执行将完成并且响应流被服务器应该发送给用户的响应

最佳答案

超时是关闭连接的一种不整洁的方式 - 当您的连接端超时时,您很可能无法告诉另一端您已经超时并正在关闭连接。也就是说,连接不是通过双方的协调行动正式关闭的,它只是一方决定将其视为已死亡。

解决这个问题的方法是在连接的两端都有超时 - 如果一侧超时,另一侧最终也会超时。


至于在服务器端到底发生了什么:由于服务器在自己的超时到期之前不知道连接已死,因此它会认为连接良好,并且会正常处理请求并尝试写入响应。可能会有一些响应缓冲,因此尝试写入响应甚至可能对服务器有效。

当服务器尝试向响应中写入足够的数据以填充可能的缓冲区时,它将阻塞,然后在发生超时时抛出异常,最终让服务器知道连接超时。

如果服务器没有用它的响应填充缓冲区,当它试图关闭连接时应该发生相同的(阻塞,然后是异常)(但这可能已经发生在你的应用程序之外,在应用程序服务器容器代码中) .

如果您最终尝试在超时已经发生后写入响应,您应该立即得到一个异常。

所以服务器上到底发生了什么很大程度上取决于你自己的代码:

  • 如果您只在执行了所有相关操作后才写响应,它们将被执行
  • 如果您混合业务逻辑和编写响应,则可能会或可能不会执行某些逻辑(取决于您已经向响应写入了多少数据以及在什么时间写入),并且没有好的方法来估计什么会发生

无论哪种方式,服务器最终都会知道发生了超时,但我不确定您的应用程序是否会始终获得此信息。

关于java - 当客户端使用 readTimeout 关闭连接时服务器会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35309513/

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