Я запускаю Node 0.6.16, и все модули обновляются по крайней мере в соответствии с npm (win7 x64). Я мог заметить, что даже если у меня нет разъединения, но по какой-то причине через некоторое время я не мог сказать, может быть, 1 час, браузер не получает никаких данных. Он кажется более частым в FF, чем в Chrome.
socket.on('disconnect', function (){console.log('disconnected')});
Это никогда не срабатывает для этого конкретного события (я имею в виду, что это может произойти, но затем я получаю log и connect.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')});
Edit2: после обновления до последней версии 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);
В то время как функция запускается каждую секунду, она никогда не регистрирует, что сокет отключен, даже если он больше ничего не получает и все еще отправляется heartbeats.
Edit3: Хорошо, что это было на моем серверном коде, некоторые сокеты уничтожались. Также обновлено до v1.x и принудительное повторное подключение.