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

时间:2014-08-20 10:33:43

标签: javascript node.js sockets websocket socket.io

我正在使用最新版本的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超时的原因是什么?其次,有没有办法让我设置更长/更短的超时时间来测试它如何影响我得到的断开频率?

2 个答案:

答案 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