Java 如何绕过超时时间立即关闭套接字?
在Java中,当您关闭一个套接字时,它不再做任何事情,但它实际上会在超时后关闭TCP连接Java 如何绕过超时时间立即关闭套接字?,java,sockets,timeout,Java,Sockets,Timeout,在Java中,当您关闭一个套接字时,它不再做任何事情,但它实际上会在超时后关闭TCP连接 我需要使用数千个套接字,我希望在关闭它们之后立即关闭它们,而不是在超时之后,这会浪费我的时间和资源。我能做什么?如果您正在运行服务器,那么这是正确的解决方案。通过循环利用和一系列其他旨在使用Java运行服务器的优化,它将比手工操作更好地管理一切 关闭套接字将断开Java对象与操作系统的连接,这意味着它不会占用JVM之外的任何资源,因此它确实不应该是一个问题。但是,如果Java的垃圾收集/终结方案的最小开销太
我需要使用数千个套接字,我希望在关闭它们之后立即关闭它们,而不是在超时之后,这会浪费我的时间和资源。我能做什么?如果您正在运行服务器,那么这是正确的解决方案。通过循环利用和一系列其他旨在使用Java运行服务器的优化,它将比手工操作更好地管理一切
关闭套接字将断开Java对象与操作系统的连接,这意味着它不会占用JVM之外的任何资源,因此它确实不应该是一个问题。但是,如果Java的垃圾收集/终结方案的最小开销太大,那么Java就不是一个有效的解决方案(因为您的问题不再局限于套接字编程)。尽管我不得不说一个高效的垃圾收集器并不比显式管理内存差多少(实际上可以做得更好)。我发现通过使用
socket.setReuseAddress(boolean)
,您可以告诉JVM重用端口,即使它处于超时时间。'我希望在关闭端口后完全关闭它们,而不是浪费我的时间和资源
不,你没有。您希望TCP/IP正常工作,而等待时间状态是其中至关重要的一部分。如果您担心TIME\u WAIT(等待时间)状态,最快的答案是接收FIN的人,而不是第一个发送FIN的人。您可能会看到插槽处于
TIME\u WAIT
状态。这是插座进入“主动关闭”连接一侧的正常状态TIME\u WAIT
的存在有一个很好的理由,因此您应该注意不要简单地重用地址
我在我的博客中写到了TIME\u WAIT
,它存在的原因以及在这里编写服务器时可以做些什么:
总之,如果可以,请更改协议,以便您的客户端输入
TIME\u WAIT
两端都应该对我的任务有效。