javascript - Node.js 设置 setKeepAlive 不使用 setTimeout 停止超时

标签 javascript node.js sockets timeout keep-alive

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

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

它绝对会发送我用 Wireshark 观察到的保活数据包。

Keep alive with Wireshark

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

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

即使与 keepAlive 选项结合使用,套接字仍会在其最后一个实际传输数据包后的 60 秒后超时。

Connection timeout

所以我的问题是,如果 keepAlive 没有真正采取任何措施来防止套接字超时,那么 keepAlive 有什么意义呢?

最佳答案

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

这两个功能在两个不同的“级别/层”上运行。 Keepalive 探测不被视为“数据”,因此这就是您仍然看到 timeout 事件的原因。

关于javascript - Node.js 设置 setKeepAlive 不使用 setTimeout 停止超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32511430/

相关文章:

JavaScript 无法读取 null 的属性 'parentElement'

php - onClick 的 javascript 没有执行?

java - 使用 TCP 连接的 Spring 方式是什么?

javascript - Node.js/Express 开源示例网站

Javascript - 按两个日期属性排序对象数组

javascript - Node.js [网络库] : How to make the buffer object a string?

javascript - 将参数从 cmd 行传递到 package.json

javascript - 搜索cloudant数据库时如何使用 'sort'?

python - 为什么 Linux 可以在多进程中接受套接字?

sockets - 如何计算数据包的到达时间?