2012-02-07 3 views
9

ユーザーがソケットに接続できなくなったときに検出できる必要があります。ノートパソコンを閉じるときにsocket.on("disconnect")が呼び出されているようではありませんユーザーをオフラインとしてマークするためにデータベースを更新するために実行する必要のあるajax呼び出しを実行します。接続が閉じられたかどうか、どうすれば確認できますか?クライアントが接続を失ったときにソケットIOが検出する

+0

私は、リスナー、またはサーバからの応答をクライアントをチェックする「ハートビート」を持つ提案します。それが私の行いなのです。 –

+1

私は以前のバージョンのWebサイトでこれを行いましたが、十分なユーザー数があれば、サーバー上で多すぎる負荷がかかるように見えますが、唯一のオプションです。 –

+0

socket.ioはハートビートを使用しているので、これは実行可能であると確信しています – EhevuTov

答えて

2

私たちもこれを見つけました。上記のように、私たち自身のハートビートタイマーを使用しました。

たとえば、サーバーは5秒ごとにハートビートを送信します(単純にサーバー時間を送信します)。クライアントには11秒のタイムアウトがあるため、ハートビートを捕まえる機会は2回あります。ハートビートを受信すると、タイマーをリセットします。両方のハートビートが不足している場合は、タイムアウト機能が実行され、必要な機能を実行できます。

かなり簡単です。

3

​​で述べたように、Socket.IOには独自のハートビートの実装があります。 デフォルトは、接続が失われた場合の25秒間隔と60秒のしきい値です。

私のアドバイス:テストで期待どおりのデフォルトを設定してください。それ以外の場合は、しきい値を逃すことがあります。

例:

socket.set("heartbeat timeout", 10); 
socket.set("heartbeat interval", 5); 
+0

これが受け入れられる回答である必要があります。それは最初に動作します...私の場合、タイムアウトと間隔はミリ秒単位で10000の代わりに10 ... Perfect Thanks! –

関連する問題