使用在localhost上运行的客户端和服务器的合成负载,我通过tcpdump和netstat验证客户端正在向服务器发送FIN数据包,但是当请求保持排队时,连接卡在CLOSE_WAIT中服务器(我使用带有排队线程池的Jetty)。当池中的工作线程可用时,即使连接已被客户端关闭,servlet也会照常处理请求。
我想要的是一种测试连接是否已经关闭的方法,以防止服务器处理已经在客户端超时的请求(我知道我可以在客户端设置带有时间戳的http头和只要时钟同步,就在服务器上检查一下,但我更愿意检查连接是否仍然打开。
我正在尝试做什么,如果是的话,怎么做?
答案 0 :(得分:2)
我不这么认为。 FIN并不意味着连接中断。 A向B发送一些数据,然后是FIN,这是完全有效的;然后A继续从B读取。这个半封闭状态没有错。
您最好的选择是提高服务器吞吐量,以便客户不必等待这么久。