我有移动客户端连接到node.js服务器,通过xhr轮询运行socket.io。我有两种客户:
因此,我的问题是如何配置(如果可能的话)来自实际客户端的心跳超时?
发布于 2012-10-11 19:17:13
据我所知,这里有两个重要的值:服务器每秒钟向客户机发送心跳;客户机直接响应,如果没有响应,服务器就决定客户机已经死了。客户端从最后一次心跳开始,等待服务器的心跳时间为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
值似乎是共享对象的一部分( Manager,这是从var io = require("socket.io").listen(server)
调用中得到的),这意味着很难对单个套接字进行更改。
我相信,有了一些socket.io黑客,你应该能够实现它,但你可能会打破其他东西在这个过程中.
发布于 2015-06-30 19:08:04
在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。
发布于 2014-08-07 12:32:44
要完成Claude的回答,您可以使用以下代码在服务器杠杆上设置这些值
io.set('heartbeat interval', 5);
io.set('heartbeat timeout', 11);
然后您可以创建两个node.js服务器,每种类型的客户机(A和B)都有一个服务器,有两个所需的选项集(心跳超时和间隔)。
https://stackoverflow.com/questions/12815231
复制相似问题