【问题标题】:Does socket.io handle keepalives automatically?socket.io 会自动处理 keepalives 吗?
【发布时间】:2017-03-06 19:55:51
【问题描述】:

我在 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,我会遇到什么问题?

【问题讨论】:

  • HTTP 选项是什么意思?你的意思是 socket.io http 轮询? Eeeck,你到底为什么要那样做?轮询的效率大大低于 webSocket 连接。仅供参考,HTTP 和 socket.io 在下面都使用 TCP,所以我不确定你为什么要调用一个选项 TCP。而且,为了完整性,socket.io 连接也以 HTTP 请求开始。
  • @jfriend00 HTTP 选项是指可用于 Linode NodeBalancer 的 HTTP 选项(如我的第一段所述)。

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


【解决方案1】:

是的。您可以设置选项。

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

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

【讨论】:

  • 你从哪里得到这些信息的? pingTimeout pingInterval 等等?他们的文档中是否有任何参考资料?
【解决方案2】:

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

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

socket.io 的这个 ping 方面的文档记录很差,但是通过检查 socket.io 使用的source code of engine.io,有一个pingTimeout(等待pong 响应的时间和一个@987654328 @(多久发送一次ping)。

【讨论】:

  • @kojow7 - 这回答了你的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多