[解決済み] Node.js:socket.ioがクライアント接続を閉じる
2022-03-05 18:59:45
質問
クライアント側でソケット接続を閉じるにはどうすればよいですか?
使っています。
- socket.io 0.9
- node.js 0.10.15
- express 3.3.4
すなわち
コール
localhost/test
-- サーバーサイド
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回取得し、といった具合に。
サーバー側の接続は、ページの再読み込みとページからの離脱時に自動的に切断されます。
しかし、クライアント側では、接続はまだ開いたままです。
クライアント側で接続を閉じるか、すでに接続が開かれているかどうかを確認するにはどうすればよいですか?
アップデイト
今、以下のように試してみました。(クライアント側)
window.onbeforeunload = function(e) {
socket.disconnect();
};
これは、クライアント側で切断イベントをトリガーしますが、まだ二重、三重の応答があります。
どうすればいいですか?
サーバ側とブラウザ側で接続することはできません。接続は1つだけです。どちらかが閉じれば、それは閉じられます(そして、閉じられたコネクションにデータをプッシュすることは当然できません)。
現在、ブラウザはページを離れると接続を閉じます(サーバー側で使用しているライブラリ/言語/OSには依存しません)。これは少なくともWebSocketでは正しいです(ロングポーリングでは
keep-alive
しかし、socket.ioがこれを正しく処理することを願っています)。
もしこのような問題が起こるなら、あなた自身のコード(サーバー側)にバグがあるのは間違いないでしょう。もしかしたら、重ねるべきでないイベントハンドラを重ねているのかもしれません。
関連
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsを完全にアンインストールして、最初から再インストールする方法 (Mac OS X)
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み] Node.js上のExpress.jsでGET(クエリ文字列)変数を取得する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】JavaScriptのgetElementByNameが機能しない
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】SyntaxError: 'import' と 'export' は 'sourceType: module' とだけ表示されるかもしれない - Gulp
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】React-Routerの子が1つしかない。
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?