我已经连接到服务器的Node.js移动客户端,通过XHR轮询socket.io运行。 我有两个类型的客户:
A型
当连接打破了由于网络问题(或客户端崩溃)的默认心脏的跳动超时过长
B型
当此客户端我需要给它更多的时间来恢复连接打破了 - 它是客户端恢复比服务器断开连接/会话更重要
所以我的问题是,如何我配置(如果可能)心跳从实际的客户端超时?
我已经连接到服务器的Node.js移动客户端,通过XHR轮询socket.io运行。 我有两个类型的客户:
A型
当连接打破了由于网络问题(或客户端崩溃)的默认心脏的跳动超时过长
B型
当此客户端我需要给它更多的时间来恢复连接打破了 - 它是客户端恢复比服务器断开连接/会话更重要
所以我的问题是,如何我配置(如果可能)心跳从实际的客户端超时?
据我所知,有2个值,这里重要:服务器发送心跳到每个客户端heartbeat interval
秒; 客户端直接响应,如果没有响应,服务器决定客户端已经死了。 客户端等待来自服务器心跳heartbeat timeout
自上次心跳秒(这应该明显比要高heartbeat interval
)。 如果还没有从服务器接收到的字heartbeat timeout
秒,它假定服务器是死的(并开始断开/重新连接根据您所设定的其他选项。
默认值是heartbeat interval = 25s
和heartbeat 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黑客,你应该能够做到这一点,但你可能会破坏其他的东西,在这个过程中...
在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 。
要完成克劳德的回答,您可以在服务器杠杆设置这些值,用下面的代码
io.set('heartbeat interval', 5);
io.set('heartbeat timeout', 11);
然后可以创建2台的node.js服务器,一个用于每个类型的客户端的(A和B),具有2个期望的选项(心跳超时和间隔)设置。