在java中维护TCP套接字的成本有多高

时间:2016-05-01 21:21:20

标签: java tcp

我目前为我的项目实现了一个心跳机制,我使用TCP作为我的底层连接。我想知道维护tcp连接有多昂贵。每个从属设备每隔5秒向主设备发送一次心跳(是的,我知道经常这样做,但我有充分的理由这样做)。所以我想知道我应该不断创建一个新连接,还是应该保持连接打开。因为如果我保持打开连接,那么在这种情况下我可以处理异常。但是,因为我需要知道每5秒钟一个奴隶是否已关闭我应该重新建立连接还是保持打开状态。提前谢谢。

3 个答案:

答案 0 :(得分:4)

定期重新打开连接的成本更高;开放时有一个three-way handshake。套接字打开后,该费用可以摊销(但只有当你打开它时)。

答案 1 :(得分:2)

如前所述,重新开放连接的成本更高,除非涉及其他因素,如移动性。您不仅有three-way握手,而且还有four-way握手终止连接。除此之外,您的TCP服务器应用程序可能为每个新连接打开新线程,这也需要分配,解除分配等。 您的连接很可能也会通过防火墙,这些防火墙通常是NAT,这反过来会打开端口和状态。这就是为什么我个人很少使用UDP,因为UDP可能在通过防火墙和ISP过滤器时遇到问题。

最后,从协议的角度来看,TCP连接本身的维护是最小的。 TCP可以选择 keep-alive ,但这些很少每5秒发送一次。在您的操作系统过程中,上下文切换的开销很小,但无论您打开和关闭连接,都会发生这种情况。

保持开放状态。

答案 2 :(得分:0)

如果你正在做一个心跳,为什么不使用UDP,TCP要求确认接收,UDP不要,然后你可以有一个监听器,只是接收任何广播到它并处理的数据包。意味着一个端口在主系统上打开,无论有多少孩子发送到它。

TCP,每个孩子需要一个连接。