クライアント側でソケット接続を閉じるにはどうすればよいですか?Node.js:socket.io closeクライアント接続
私が使用しています: コールlocalhost/test
- サーバー:
- 0.9 socket.ioのNode.js 0.10.15
- は3.3.4
すなわちを表現側
var test = io
.of('/test')
.on('connection', function (socket) {
console.log('open socket: ' + socket);
socket.on('disconnect', function() {
console.log('disconnected event');
//socket.manager.onClientDisconnect(socket.id); --> endless loop with this disconnect event on server side
//socket.disconnect(); --> same here
});
});
- クライアント側
var socket = io.connect('http://localhost:3000/test');
socket.on('disconnect', function() {
console.log('disconnect client event....');
});
socket.emit('getInitData', function (data) {
.. do something with data
});
私は、サーバー(getInitData)からいくつかの値を必要とするテストページをロードした場合。
最初のページにアクセスして、データを1回取得します。リロードまたは2回目の訪問で、2回以上取得します。
サーバー側の接続は、ページの再ロード時およびページから離れると自動的に終了します。
しかし、クライアント側では接続はまだ開いています。
クライアント側で接続を閉じるか、すでに開いている接続があるかどうかを確認するにはどうすればよいですか?私は今、次の試してみました
UPDATE
:(クライアント側)
window.onbeforeunload = function(e) {
socket.disconnect();
};
これは、クライアント側で切断イベントをトリガし、私はまだ二回またはトリプル応答を取得します。
どのように 'getInitData'イベントを処理しますか? –
'getInitData'は、自分の書いたノードのアドオンからいくつかの値を返します。 これらの値はフォーム(チェックボックス、テキストフィールドなど)に設定されていますが、サーバーの接続が複数回開始されていることがわかりました。私がページをリロードするたびに、接続が閉じていても新しい接続が追加されます。 – baam
サーバー側とブラウザ側に接続するようなものはありません。接続は1つだけです。一方の側がそれを閉じると、それは閉じられます(明らかに閉じている接続にデータをプッシュすることはできません)。ページを終了するときにブラウザーが接続を終了すると(使用しているライブラリーに依存しません)、これは少なくともWebSocketに当てはまります。このような問題が発生した場合は、自分のコード(サーバー側)にバグがあることを確信しています。イベントハンドラをスタックしないでください。 – freakish