Node 0.6.16 を実行していますが、少なくとも npm (win7 x64) によると、すべてのモジュールは最新です。切断が発生していなくても、何らかの理由でしばらくすると、おそらく 1 時間後、ブラウザーがデータを受信していないことがわかりませんでした。Chrome よりも FF の方が頻繁に発生するようです。
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')});
Edit2 : 最新バージョンの socket.io (1.2.1) とノード v0.10.35 に更新した後も、同じ問題が発生します。さらに驚くべきことに、クライアントに次のコードを追加しました。
function checkSocket(){
if(socket){
if(!socket.connected){
console.log('socket disconnected');
clearInterval(intv);
}
}
}
intv = setInterval(checkSocket, 1000);
関数は毎秒実行されますが、ソケットが切断されたことをログに記録することはありません。これ以上何も受信せず、まだハートビートが送信されている場合でも..
Edit3:サーバー側のコードにありましたが、一部のソケットが破棄されていました。またv1.xにアップデートして強制再接続。