使用在本地主机上运行的客户端和服务器的合成负载,我通过 tcpdump 和 netstat 验证客户端正在向服务器发送 FIN 数据包,但连接卡在 CLOSE_WAIT 中,而请求仍排队服务器(我使用带有排队线程池的 Jetty)。当池中存在可用工作线程时,即使客户端已关闭连接,servlet 仍会照常处理请求。
我想要的是一种测试连接是否已经关闭的方法,以防止服务器处理客户端已经超时的请求(我知道我可以在客户端上设置一个带有时间戳的http header 和只要时钟同步,就在服务器上检查这一点,但我更愿意检查连接以查看它是否仍然打开)。
我想做的事情可能吗?如果可能的话,如何做?
最佳答案
我不这么认为。 FIN 并不意味着连接已断开。 A 向 B 发送一些数据,然后发送 FIN 是完全有效的;然后A继续从B读取。这种半关闭状态没有任何问题。
更好的选择是提高服务器吞吐量,这样客户端就不必等待太久。
关于java - 检查 HttpServletRequest 的连接是否仍然打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15261398/