Node.js设置setKeepAlive没有使用setTimeout停止超时

时间:2015-09-10 20:55:16

标签: javascript node.js sockets timeout keep-alive

我正在试图弄清楚Node.js的网络类如何与超时和保持活动一起工作。我在服务器端设置它们并观察它们设置这些变量有何不同。我注意到如果我将keepalive设置为以下内容:

// Set keepalive
socket.setKeepAlive( true, 30000 );

它绝对会发送keepalive数据包,我在Wireshark中观察到。

Keep alive with Wireshark

但是,即使我订阅套接字的超时事件,套接字也不会超时。所以我尝试设置套接字的超时选项。

// Set timeout variables
socket.setTimeout( 60000 );

即使与keepAlive选项结合使用,套接字在最后一次真正传输的数据包之后仍然会在60秒后超时。

Connection timeout

所以我的问题是,如果它实际上没有做任何事情来阻止套接字超时,那么keepAlive有什么意义呢?

1 个答案:

答案 0 :(得分:1)

socket.setTimeout()仅在您指定的任何持续时间内未收到数据时发出timeout事件。 socket.setKeepAlive()用于发送keepalive探测器作为检测死插座的方法。

这两个功能在两个不同的级别/层运行。" Keepalive探针不被视为"数据,"这就是为什么你仍然看到timeout事件。

相关问题