控制从socket.io客户端心跳超时(Controlling the heartbeat time

2019-06-18 12:13发布

我已经连接到服务器的Node.js移动客户端,通过XHR轮询socket.io运行。 我有两个类型的客户:

  • A型

    当连接打破了由于网络问题(或客户端崩溃)的默认心脏的跳动超时过长

  • B型

    当此客户端我需要给它更多的时间来恢复连接打破了 - 它是客户端恢复比服务器断开连接/会话更重要

所以我的问题是,如何我配置(如果可能)心跳从实际的客户端超时?

Answer 1:

据我所知,有2个值,这里重要:服务器发送心跳到每个客户端heartbeat interval秒; 客户端直接响应,如果没有响应,服务器决定客户端已经死了。 客户端等待来自服务器心跳heartbeat timeout自上次心跳秒(这应该明显比要高heartbeat interval )。 如果还没有从服务器接收到的字heartbeat timeout秒,它假定服务器是死的(并开始断开/重新连接根据您所设定的其他选项。

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

更改heartbeat timeout单个客户端很简单:

var socket = io.connect(url);
socket.heartbeatTimeout = 20000; // reconnect if not received heartbeat for 20 seconds

但是在服务器上时, heartbeat interval值似乎是一个共享对象的一部分(经理,这是你从你得到什么var io = require("socket.io").listen(server)调用),这意味着它不能轻易变更于个别插座。

我敢肯定,随着一些socket.io黑客,你应该能够做到这一点,但你可能会破坏其他的东西,在这个过程中...



Answer 2:

在socket.io 1.x中,API已经改变,但概念是相同的。

相反heartbeatInterval和heartbeatTimeout的,性质是pingInterval和pingTimeout。 例如,

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 。



Answer 3:

要完成克劳德的回答,您可以在服务器杠杆设置这些值,用下面的代码

io.set('heartbeat interval', 5);
io.set('heartbeat timeout', 11);

然后可以创建2台的node.js服务器,一个用于每个类型的客户端的(A和B),具有2个期望的选项(心跳超时和间隔)设置。



文章来源: Controlling the heartbeat timeout from the client in socket.io