IO сокета NodeJS перестает излучать случайным образом?

Я использую Node 0.6.16, и все модули обновлены, по крайней мере, согласно npm. (вин7 х64). Я мог заметить, что, даже если у меня не происходит отключения, но по какой-то причине через некоторое время, я не могу сказать, может быть, 1 час, браузер не получает никаких данных. Кажется, это чаще встречается в FF, чем в Chrome.

socket.on('disconnect', function (){console.log('disconnected')});

Это никогда не срабатывает для этого конкретного события (я имею в виду, что это может произойти, но затем я получаю журнал, и socket.io автоматически переподключается — в этом случае ничего не происходит, он просто перестает работать, и это наиболее частое событие).

Так что я не знаю, где искать. NodeJS по-прежнему регистрирует пульс, но по какой-то причине соединение не устанавливается. Я подозреваю, что при смене вкладки (любого?) Браузера через некоторое время, поскольку окно/вкладка больше не имеет фокуса, socket.io перестает получать данные? Я могу ошибаться, и это может быть не связано с фокусом, но это моя основная зацепка. У кого-нибудь еще есть идеи?

Редактировать: клиентская сторона довольно прямолинейна:

socket = io.connect('http://xxx.xxx.xxx.xxx:8081', {secure:false, 'reconnect': true, 'reconnection delay': 500, 'max reconnection attempts': 10});      
            socket.on('connect', function(){console.log('connected')});
            socket.on('message', function(data){//do something);        

            socket.on('disconnect', function (){console.log('disconnected')});

Редактировать2: После обновления до последней версии socket.io (1.2.1) и node v0.10.35 у меня все еще есть та же проблема. Что еще более удивительно, я добавил следующий фрагмент кода в клиент:

function checkSocket(){
    if(socket){
        if(!socket.connected){
            console.log('socket disconnected');
            clearInterval(intv);
        }
    }       
}

intv = setInterval(checkSocket, 1000);

Хотя функция запускается каждую секунду, она никогда не регистрирует, что сокет отключен, даже если он больше ничего не получает и все еще отправляет пульс..

Edit3:Хорошо, это было в моем коде на стороне сервера, некоторые сокеты уничтожались. Также обновлено до v1.x и принудительное переподключение.

25
задан José Ricardo Pla 21 May 2015 в 16:08
поделиться