Socket.io随机断线(v1.0.6)

我正在使用最新版本的socket.io(1.0.6)来制作Phaser和Node的在线多人游戏。 我的问题是,一旦客户连接,他们会偶尔和随机,断开连接。 似乎没有发生这种情况的具体情况。 有时候是在游戏完全闲置的时候,有些时候是所有玩家都向服务器发送input。

通过检查来自socket.io的debugging输出,我发现断开连接的原因是“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); }; 

这有什么原因吗? 我只是在本地主机上testing我的服务器,所以我没有理由认为会有任何重大延迟导致超时。 我的套接字是根据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超时的原因是什么? 其次,有什么办法让我设置超时/更短的时间来testing这是如何影响我正在断开的频率?

不幸的是,你不能使用socket.io来修改ping时间间隔,如果你使用了核心库(engine.io),你可以。


感谢PawełWszoła指出正确的答案。 根据socket.io上的文档:

传递给socket.io的相同选项总是传递给创build的engine.io服务器。

所以你可以通过传递参数来设置引擎的ping超时时间和间隔时间。

需要('socket.io')。listen(app,{pingTimeout:4000,pingInterval:4000});

你在控制台中得到这个,

 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