2016-02-29 45 views
4

有什么利弊实现自己的心跳和setting`keepalive的插座?插座心跳VS存活

我读的地方,是存活有时会失败,连接将被关闭,反正(取决于网络结构)。另一件事是自己的心跳可以检测到应用程序是否响应(不仅是套接字)。

我的主要目标是确保所有这些:保持连接,即使没有数据发送(旁边可能心跳),两侧,应用响应检测快速连接丢失检测。

我已经实现了在两端简单的心跳和它的伟大工程,但我不知道,也许我可以开箱存活功能的更换。与TCP内置的存活功能

+0

不要对不是代码的文本使用代码格式。 – EJP

回答

3

一个问题是,它并不总是很容易配置。例如,在Linux上有各种选项setsockopt的()(例如TCP_KEEPIDLE,TCP_KEEPCNT和TCP_KEEPINTVL),您可以用它来存活的行为设置为你想要什么,但in other OS's those behaviors are not easily adjusted, at least not programmatically。所以,如果你希望你的程序的keepalive行为可以移植到各种操作系统上,并且在所有操作系统上保持一致,那么通常情况下就需要滚动你自己的心跳。

另一方面,可能有一些程序或网络协议不易支持心跳/无操作消息的概念(或者您可能希望程序能够使用多种协议,而不必为每个支持的协议提供单独的保活逻辑),并且在这种情况下,您可能需要使用内置的保持连接,因为它具有发送和接收“透明”Keepalive数据包的能力,这些数据包不会影响内容TCP数据流。在这种情况下,内置的keepalive会很有用(特别是如果你真的需要在Linux下运行keepalive代码的话)。

+0

您是否知道任何情况下保持活着都不起作用?除了配置的东西。 –

+0

那么,我在我的工作中编写的控制软件就是一个例子:它需要在Mac,Linux和Windows上运行,并且如果与服务器的连接丢失,它需要能够在一秒钟或两秒内通知操作员因为它在现场演出中控制音响系统,并且如果操作员不能控制声音,他需要马上知道,以便他可以采取行动)。对于这种用例,keepalive是不够的,因为在Windows和Mac下,客户端计算机可能需要几个小时才能确定连接已经丢失。 –