Node.js设置setKeepAlive不停止与setTimeout超时

我想弄清楚Node.js的净类如何处理超时和keepalive。 我将它们设置在服务器端,观察设置这些variables有什么不同。 我注意到,如果我将Keepalive设置为以下内容:

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

它绝对会发送Keepalive数据包,我用Wireshark观察。

用Wireshark保持活力

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

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

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

连接超时

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

如果在指定的任何时间段之后没有收到任何数据 ,则socket.setTimeout()仅会发送timeout事件。 socket.setKeepAlive()用于发送keepalive探测器作为检测死亡套接字的手段。

这两个function在两个不同的“层次/层次”上运行。 保持活动探测不被视为“数据”,所以这就是为什么你仍然看到timeout事件。