socket.io 是否自动处理保活?

Does socket.io handle keepalives automatically?

我在 Linode 服务器上使用 node.js 和 socket.io。有人告诉我,我应该在我的应用程序中使用 KeepAlives,以便使用 Linode NodeBalancer。我还被告知我必须将 NodeBalancer 协议设置为使用 TCP 而不是(HTTP 或 HTTPS 都禁用 KeepAlives)。

我的问题是,KeepAlives 是否已经默认在 socket.io 中实现?似乎有某种东西使连接保持活动状态,所以我认为这已经由 socket.io 处理了。但是,我似乎找不到有关此主题的任何信息。如果在 socket.io 中没有默认实现 KeepAlives,我在使用 NodeBalancer 时会遇到什么问题?如果我应该实施 KeepAlives,我需要采取哪些步骤才能在我的应用程序中实施它们?

另外一个问题,如果在socket.io中实现KeepAlives,如果我使用HTTP选项而不是TCP,我会面临什么问题?

My question is, are KeepAlives already implemented in socket.io by default?

是的,每隔一段时间就会发送一个 ping 数据包(一个非常小的 webSocket 数据包)作为心跳 "test" 连接并确保它仍然有效并保持活动状态。 pong 数据包从 ping 请求返回,因此发送方知道 ping 是否通过。

socket.io 的这个 ping 方面的文档非常少,但是通过检查 socket.io 使用的 source code of engine.io,既有 pingTimeout(等待多长时间对于 pong 响应和 pingInterval(发送 ping 的频率)。

是的。并且可以设置选项。

var myApp = require('express')();
var http = require('http').Server(myApp);

var io = require('socket.io')(http, {'pingTimeout': 7000, 'pingInterval': 3000});