我有一个基本的 Socket.io 服务器设置,如下所示:
var server = express.createServer().listen(port);
this.io = socketIO.listen(server);
this.io.sockets.on('connection', function(socket){
initSocket(socket);
});
我还配置了 socket.io 以使用 XHR 轮询,如下所示:
io.set("transports", ["xhr-polling"]);
io.set("close timeout", 3);
io.set("heartbeat interval", 2);
问题是每次客户端发送心跳(每 2 秒)时,都会触发“连接”事件。是否有一个不同的事件我可以使用,每次套接字最初连接时都会触发一次?
我会使用“授权”事件,但它只传递握手对象而不是实际的套接字。
发现问题了。我将 xhr“轮询持续时间”设置为 heroku 建议的 10 秒,如下所示:
io.set("polling duration", 10);
这意味着客户端每 10 秒才发出一个新的 xhr 请求(前一个请求返回后)。同时我将“关闭超时”设置为 3 秒:
io.set("close timeout", 3);
这意味着如果服务器自上次请求后 3 秒内没有收到客户端的消息,它将关闭连接,因此会触发连续的“断开/连接”事件。
解决方案是将关闭超时设置为高于轮询持续时间。看来“心跳间隔”与 xhr 连接无关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)