我一直有同样的问题,我一直在研究套接字来摆脱这个问题。
让我说几句话,但在我必须说我不是Java程序员之前。
我不会解释什么是close_wait,因为Brian White已经说过了应该说的一切。
为了避免close_wait,您需要确保您的服务器在发回响应后不会关闭连接,因为首先断开连接的人将停留在close_wait和time_wait中。所以,如果你的服务器被卡在close_wait中,它会告诉我它在发送响应后断开连接。
你应该通过做一些事情来避免这种情况。
1 – 如果您的客户端应用程序没有使用http 1.1协议,则必须将其设置为使用它,因为“keep-alive http头文件”选项。
2 – 如果客户端正在运行http 1.1并且不起作用,或者如果您必须使用http 1.0,则应设置连接请求头属性:
connection: keep-alive
这告诉服务器完成请求后客户端和服务器都不应该断开连接。通过这样做,您的服务器在收到的每个请求后都不会断开连接。
3 – 在客户端,重新使用您的套接字。例如,如果您在循环中创建了大量套接字客户端,则应该创建套接字一次,并在每次需要发送请求时使用它。在我的应用程序中使用的方法是具有一个套接字池,并获得一个可用的套接字(已经连接到服务器,并且具有保持活动属性)。然后我使用它,当我完成后,我把它放回池中是可重用的。
4 – 如果您真的需要在发送请求后断开连接,请确保您的客户端执行此操作并保持连接:keep-alive。
是的,当您在服务器端有很多close_waits或time_waits时,您可能会遇到问题。
看看这个[link] [1],这解释了活着是什么。
我希望这是有帮助的。有了这些东西,我设法解决了我的问题。