node.js中的setKeepAlive如何工作以及如何实现它?

meg*_*ido 2 sockets tcp node.js

无法理解Node.js网络套接字中setKeepAlive方法的原理.在initialDelay完成后会发生什么?

Mic*_*ley 7

此方法控制底层TCP套接字上的TCP保持活动功能.有关TCP Keepalive的信息,请查看此文章.这是一个解释什么initialDelay("keepalive计时器")的代码片段:

2.1.什么是TCP keepalive?

keepalive概念非常简单:当您设置TCP连接时,您可以关联一组计时器.其中一些计时器处理keepalive程序.当keepalive定时器到达零时,您向对等体发送一个keepalive探测数据包,其中没有数据并且ACK标志已打开.您可以这样做是因为TCP/IP规范,作为一种重复的ACK,并且远程端点将没有参数,因为TCP是面向流的协议.另一方面,您将收到来自远程主机的回复(根本不需要支持keepalive,只需TCP/IP),没有数据和ACK设置.

如果您收到对keepalive探测的回复,则可以断言连接仍然正常运行,而不必担心用户级实现.实际上,TCP允许您处理流而不是数据包,因此零长度数据包对用户程序没有危险.

此过程很有用,因为如果其他对等方失去连接(例如通过重新启动),您将注意到连接已断开,即使您没有连接.如果对等方未回复keepalive探针,则可以断言连接不能被视为有效,然后采取正确的操作.