2

使用在 localhost 上运行的客户端和服务器的合成负载,我通过 tcpdump 和 netstat 验证客户端正在向服务器发送 FIN 数据包,但是连接卡在 CLOSE_WAIT 中,而请求仍在服务器上排队(我正在使用带有排队线程池的 Jetty)。当池中有一个工作线程可用时,即使客户端已经关闭了连接,servlet 也会照常处理该请求。

我想要的是一种测试连接是否已经关闭的方法,以防止服务器处理已经在客户端超时的请求(我知道我可以在客户端上设置一个带有时间戳的 http 标头并检查它服务器只要时钟同步,但我更愿意检查连接以查看它是否仍然打开)。

我正在尝试做的事情是否可能,如果可以,如何做?

4

1 回答 1

2

我不这么认为。FIN 并不意味着连接断开。A向B发送一些数据,然后是FIN是完全有效的;然后 A 继续从 B 读取。这种半关闭状态没有错。

您更好的选择是提高服务器吞吐量,这样客户端就不必等待这么长时间。

于 2013-03-07T01:55:19.993 回答