socket.io是否自动处理keepalive?

时间:2016-10-24 22:28:53

标签: node.js socket.io keep-alive linode

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

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

作为一个额外的问题,如果在socket.io中实现KeepAlive,如果我使用HTTP选项而不是TCP,我将面临哪些问题?

2 个答案:

答案 0 :(得分:7)

是。你可以设置选项。



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

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




答案 1 :(得分:3)

  

我的问题是,KeepAlives是否已经在socket.io中实现了   默认?

是的,一个ping数据包(一个非常小的webSocket数据包)每隔一段时间就作为一个心跳发送到"测试"连接并确保它仍然可以正常运行并保持活动状态。 pong请求返回ping数据包,以便发件人知道ping是否通过。

socket.io的这个ping方面记录很差,但通过检查socket.io使用的source code of engine.io,有pingTimeout(等待{{1}多长时间}响应和pong(发送pingInterval的频率。)