Node.js 设置 setKeepAlive 不使用 setTimeout 停止超时
Node.js set setKeepAlive not stopping a timeout with setTimeout
我想弄清楚 Node.js 的网络 class 如何处理超时和保活。我在服务器端设置它们并观察设置这些变量有什么不同。我注意到如果我将 keepalive 设置为以下内容:
// Set keepalive
socket.setKeepAlive( true, 30000 );
它绝对会发送我用 Wireshark 观察到的保活数据包。
但是,即使我订阅了socket的超时事件,socket也不会超时。所以我尝试设置套接字的超时选项。
// Set timeout variables
socket.setTimeout( 60000 );
即使与 keepAlive 选项结合使用,套接字仍会在 60 秒后超时,几乎是在其最后一个实际传输的数据包之后。
所以我的问题是,如果 keepAlive 没有真正采取任何措施来防止套接字超时,那它还有什么意义呢?
socket.setTimeout()
仅在您指定的任何时间后没有收到 数据 时发出 timeout
事件。 socket.setKeepAlive()
用于发送 keepalive 探测作为检测死套接字的方法。
这两个功能在两个不同的 "levels/layers." Keepalive 探测不被考虑 "data," 所以这就是为什么你仍然看到 timeout
事件的原因。
我想弄清楚 Node.js 的网络 class 如何处理超时和保活。我在服务器端设置它们并观察设置这些变量有什么不同。我注意到如果我将 keepalive 设置为以下内容:
// Set keepalive
socket.setKeepAlive( true, 30000 );
它绝对会发送我用 Wireshark 观察到的保活数据包。
但是,即使我订阅了socket的超时事件,socket也不会超时。所以我尝试设置套接字的超时选项。
// Set timeout variables
socket.setTimeout( 60000 );
即使与 keepAlive 选项结合使用,套接字仍会在 60 秒后超时,几乎是在其最后一个实际传输的数据包之后。
所以我的问题是,如果 keepAlive 没有真正采取任何措施来防止套接字超时,那它还有什么意义呢?
socket.setTimeout()
仅在您指定的任何时间后没有收到 数据 时发出 timeout
事件。 socket.setKeepAlive()
用于发送 keepalive 探测作为检测死套接字的方法。
这两个功能在两个不同的 "levels/layers." Keepalive 探测不被考虑 "data," 所以这就是为什么你仍然看到 timeout
事件的原因。