unix域套接字是否具有时间等待状态?

unix域套接字是否具有时间等待状态?,unix,tcp,unix-socket,Unix,Tcp,Unix Socket,我在同一台主机上运行服务A和服务B。它们使用TCP环回相互连接。发送方每次发送消息时都会创建一个新的TCP连接,并立即关闭连接。由于大多数关闭的连接都处于TIME_WAIT状态,因此在QPS较高的情况下,它很快就会用完临时端口 我想知道使用unix域套接字是否解决了这个问题。它的等待状态是否与TCP相同 TIME_WAIT是一种TCP结构,旨在防止由于“半开放”连接或远程和本地方之间的连接状态不一致而导致的问题。参见p23上的[]状态图,p33周围的半开连接 对于Unix套接字,操作系统完全知道

我在同一台主机上运行服务A和服务B。它们使用TCP环回相互连接。发送方每次发送消息时都会创建一个新的TCP连接,并立即关闭连接。由于大多数关闭的连接都处于TIME_WAIT状态,因此在QPS较高的情况下,它很快就会用完临时端口


我想知道使用unix域套接字是否解决了这个问题。它的等待状态是否与TCP相同

TIME_WAIT是一种TCP结构,旨在防止由于“半开放”连接或远程和本地方之间的连接状态不一致而导致的问题。参见p23上的[]状态图,p33周围的半开连接

对于Unix套接字,操作系统完全知道套接字两端的连接状态——它只是本地的。Unix套接字中没有FIN/FIN-ACK握手,不需要等待时间

我不确定TIME_WAIT是否用于本地TCP连接。与Unix套接字不需要它的原因相同,它不应该是必需的,但可能仍然存在于a)避免针对异常的仅本地情况进行优化,b)避免“本地主机”TCP连接和远程连接之间的行为偏差

从命令行可以快速查看一件事:netstat-anop。您永远不会看到unix套接字处于等待状态。:)

是的:Unix域套接字应该解决“等待加载时间”问题。如果您的接口仅为本地接口,那么Unix套接字处理的开销也会减少—这会带来一些轻微的性能提升。一旦连接或侦听,从API的角度来看,它们的行为与TCP套接字是无法区分的

参考资料:

  • 其中讨论了Unix-socket-on-a-remote-share技巧不起作用的原因
  • -传输控制协议

  • 无论哪种方式,您都应该使用连接池。@EJP同意。但是拥有一个非平凡的连接池是一项艰巨的工作。如果可能的话,我宁愿接受它。谢谢你的回答!时间等待用于环回tcp连接。我确实看到netstat的套接字处于时间等待状态,其中src和dest ip都是127.0.0.1