[解決済み] ウェブソケットで接続損失を処理する
質問
私は最近、ローカルのWebSocketサーバーをセットアップしました。それはうまく動作しますが、私は、クライアントまたはサーバーが意図的に開始したものではない突然の接続の喪失、すなわち、サーバーが電源を失った、イーサネットケーブルを引き抜いた、などの処理方法を理解していないことに少し困っています。私は、クライアントが10秒以内に接続が失われたかどうかを知る必要があります。
クライアント側、単に接続されている。
var websocket_conn = new WebSocket('ws://192.168.0.5:3000');
websocket_conn.onopen = function(e) {
console.log('Connected!');
};
websocket_conn.onclose = function(e) {
console.log('Disconnected!');
};
私は手動で接続の切断をトリガーすることができ、うまくいきます。
websocket_conn.close();
しかし、単にイーサネットケーブルをパソコンの背面から抜いたり、接続を無効にしたりすると
onclose
は呼ばれない。他の投稿で、最終的に呼び出されるのは、以下の場合だと書いてありました。
TCPが接続の喪失を検出
しかし、Firefoxのデフォルトは10分なので、私が必要とするタイムリーな方法ではなく、私は本当に何百ものコンピュータを回りたくはありません
about:config
この値を変更します。私が読んだ唯一の提案は、'ping/pong' keep-alive ポーリングスタイルのメソッドを使用することですが、これはウェブソケットのアイデアに直感的でないように思われます。
このような切断の動作を検出する簡単な方法はありますか?私が読んでいる古い記事は、技術的にまだ最新で、最適な方法はまだ「ping/pong」スタイルなのでしょうか?
解決方法は?
これは、私のプロジェクトのセットアップに特化したもので、私の質問で言及されていない基準があることに依存しています。
ウェブソケットサーバーへの接続はFirefoxアドオン内で行われ、デフォルトでFirefoxのTCP設定には10分のタイムアウトがあります。詳細については
about:config
をクリックし、TCPを検索してください。
Firefoxアドオンはこれらのパラメータにアクセスすることができます。
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
また、これらのパラメータを変更するには、新しい値とともに branch & 設定を指定します。
prefs.getBranch("network.http.tcp_keepalive.").setIntPref('long_lived_idle_time', 10);
このため、アドオンがインストールされているコンピュータでは、TCP接続のタイムアウトが10秒に設定されています。接続が切断されると
onclose
イベントが発生し、アラートが表示され、接続の再確立が試みられます。
websocket_conn.onclose = function (e) {
document.getElementById('websocket_no_connection').style.display = 'block';
setTimeout(my_extension.setup_websockets, 10000);
};
関連
-
[解決済み】React.jsの配列の子要素のユニークキーを理解する
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] jQueryでページを更新するにはどうすればよいですか?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] jQueryで入力を無効化/有効化する?
-
[解決済み] JavaScriptで2つの日付を比較する
-
[解決済み] Long-Polling、Websocket、Server-Sent Events (SSE)、Cometとは何ですか?
-
[解決済み] WebSocketとサーバー送信型イベントの比較/EventSource
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】React Js: Uncaught (in promise) SyntaxError: 位置 0 の JSON で予期しないトークン < が発生しました。
-
[解決済み】JavaScriptのinnerHTMLで要素が更新されない
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み】WebSocket接続に失敗しました。WebSocket のハンドシェイク中にエラーが発生しました。予期しない応答コードです。400
-
[解決済み】'useState' が定義されていない no-undef React
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み】Vueが定義されていない