我正在使用最新版本的socket.io(1.0.6)与Phaser和Node进行在线多人游戏。我的问题是,一旦客户端连接,他们偶尔会随机断开连接。似乎没有发生这种情况的具体情况。有时是游戏完全闲置,有时候所有玩家都在向服务器发送输入。
通过检查socket.io的调试输出,我发现断开连接的原因是“ping超时”。具体来说,从socket.js库文件中触发以下行:
Socket.prototype.setPingTimeout = function () {
var self = this;
clearTimeout(self.pingTimeoutTimer);
self.pingTimeoutTimer = setTimeout(function () {
self.onClose('ping timeout'); // <------------------------
}, self.server.pingInterval + self.server.pingTimeout);
};
这是否会发生这种情况?我只是通过localhost测试我的服务器,所以我没有理由认为会有任何明显的延迟导致超时。我的套接字设置与socket.io网站上的聊天应用示例一致:
服务器:
//http server setup
var io = require('socket.io')(http);
io.on('connection', function(socket){
//Game logic,socket listeners, io.emits
});
客户端:
var socket = io();
//client side listeners, emissions back to server
我的问题首先是我可能会间歇性地获得ping超时的原因是什么?其次,有没有办法让我设置更长/更短的超时时间来测试它如何影响我得到的断开频率?
答案 0 :(得分:1)
不幸的是你无法使用socket.io来修改ping间隔,如果你使用了核心库(engine.io),你就可以。
感谢PawełWszoła指出了正确的答案。根据socket.io上的文档:
传递给socket.io的相同选项总是传递给engine.io创建的服务器。
因此,您可以通过将它们作为参数传递来设置引擎的ping超时和间隔。
require('socket.io')。listen(app,{pingTimeout:4000,pingInterval:4000});
答案 1 :(得分:0)
你是否在控制台中得到了这个,
debug - setting request GET /socket.io/1/jsonp-polling/487577450665437510?t=1312872393095&i=1
debug - setting poll timeout
debug - clearing poll timeout
debug - jsonppolling writing io.j[1]("7:::1+0");
debug - set close timeout for client 487577450665437510
warn - client not handshaken client should reconnect
info - transport end
debug - cleared close timeout for client 487577450665437510
debug - discarding transport
debug - setting request GET /socket.io/1/xhr-polling/487577450665437510
debug - setting poll timeout
debug - clearing poll timeout
debug - xhr-polling writing 7:::1+0
debug - set close timeout for client 487577450665437510
warn - client not handshaken client should reconnect
info - transport end
debug - cleared close timeout for client 487577450665437510
debug - discarding transport
debug - setting request GET /socket.io/1/jsonp-polling/487577450665437510?t=1312872393150&i=1
debug - setting poll timeout
debug - clearing poll timeout
debug - jsonppolling writing io.j[1]("7:::1+0");
debug - set close timeout for client 487577450665437510
warn - client not handshaken client should reconnect
info - transport end
debug - cleared close timeout for client 487577450665437510
debug - discarding transport
debug - setting request GET /socket.io/1/xhr-polling/487577450665437510
debug - setting poll timeout
debug - clearing poll timeout
debug - xhr-polling writing 7:::1+0
debug - set close timeout for client 487577450665437510
warn - client not handshaken client should reconnect
https://github.com/Automattic/socket.io/wiki/Configuring-Socket.IO