首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在socket.io中控制客户端的心跳超时

在socket.io中控制客户端的心跳超时
EN

Stack Overflow用户
提问于 2012-10-10 08:36:22
回答 3查看 46.5K关注 0票数 27

我有移动客户端连接到node.js服务器,通过xhr轮询运行socket.io。我有两种客户:

  • A型 当连接因网络问题(或客户端崩溃)而中断时,默认心跳超时时间太长。
  • B型 当这个客户端的连接中断时,我需要给它更多的恢复时间--客户机恢复比服务器中断连接/会话更重要。

因此,我的问题是如何配置(如果可能的话)来自实际客户端的心跳超时?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-11 19:17:13

据我所知,这里有两个重要的值:服务器每秒钟向客户机发送心跳;客户机直接响应,如果没有响应,服务器就决定客户机已经死了。客户端从最后一次心跳开始,等待服务器的心跳时间为heartbeat timeout秒(显然应该高于heartbeat interval)。如果它没有在heartbeat timeout秒内收到来自服务器的消息,它将假设服务器已死(并将根据您设置的其他选项开始断开/重新连接)。

默认值是heartbeat interval = 25sheartbeat timeout = 60s。两个项目都是在服务器上设置的,heartbeat timeout在连接时被发送到客户端。

更改单个客户端的heartbeat timeout很容易:

代码语言:javascript
运行
复制
var socket = io.connect(url);
socket.heartbeatTimeout = 20000; // reconnect if not received heartbeat for 20 seconds

但是,在服务器上,heartbeat interval值似乎是共享对象的一部分( Manager,这是从var io = require("socket.io").listen(server)调用中得到的),这意味着很难对单个套接字进行更改。

我相信,有了一些socket.io黑客,你应该能够实现它,但你可能会打破其他东西在这个过程中.

票数 57
EN

Stack Overflow用户

发布于 2015-06-30 19:08:04

在socket.io 1.x中,API已经改变,但概念保持不变。

这些属性不是heartbeatInterval和heartbeatTimeout,而是pingInterval和pingTimeout。例如,

代码语言:javascript
运行
复制
var server = app.listen(80);
io = socketio(server,{'pingInterval': 45000});

请参阅http://socket.io/docs/server-api/#server(opts:object)上的文档,该文档将指向https://github.com/Automattic/engine.io#methods-1

票数 26
EN

Stack Overflow用户

发布于 2014-08-07 12:32:44

要完成Claude的回答,您可以使用以下代码在服务器杠杆上设置这些值

代码语言:javascript
运行
复制
io.set('heartbeat interval', 5);
io.set('heartbeat timeout', 11);

然后您可以创建两个node.js服务器,每种类型的客户机(A和B)都有一个服务器,有两个所需的选项集(心跳超时和间隔)。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12815231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档