Я использую последнюю версию socket.io(1.0.6), чтобы сделать многопользовательскую онлайн-игру с Phaser и Node. Моя проблема в том, что как только клиенты подключатся, они будут время от времени и наугад отключать. Кажется, что нет конкретного случая, когда это происходит. Иногда это происходит, когда игра полностью бездействует, а иногда это происходит, когда все игроки отправляют входные данные на сервер.
Проверяя вывод debug из 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 с перерывами? и во-вторых, есть ли способ установить время таймаута намного дольше/короче, чтобы проверить, как это влияет на частоту отключений, которые я получаю?