1. 切断理由WebSocket が切断される理由は多数あります。WebSocket が切断されたときにエラーを出力するのが最適です。 ws.onclose = 関数 (e) { console.log('Websocketが切断されました: ' + e.code + ' ' + e.reason + ' ' + e.wasClean) コンソール.log(e) } エラーステータスコード: WebSocket が切断されると、CloseEvent がトリガーされます。CloseEvent は、接続が閉じられると WebSocket を使用してクライアントに送信されます。これは、WebSocket オブジェクトの onclose イベント リスナーで使用されます。 CloseEvent のコード フィールドは、WebSocket が切断された理由を示します。このフィールドから切断の理由を分析できます。 CloseEvent には注意が必要な 3 つのフィールドがあります。これら 3 つのフィールドを分析することで、通常は切断の理由を見つけることができます。 CloseEvent.code: codeはエラーコードで、整数型です。 CloseEvent.reason: 理由は切断の理由、文字列 CloseEvent.wasClean: wasClean は切断が正常であったかどうかを示すブール値です。通常、異常な切断が発生した場合、値は false になります。
2. ハートビートを追加するvar lockReconnect = false; // 繰り返しの ws 接続を回避する var ws = null; // 現在のブラウザが WebSocket をサポートしているかどうかを判断します var wsUrl = serverConfig.socketUrl; createWebSocket(wsUrl); //wsに接続 関数createWebSocket(url) { 試す{ if('WebSocket' がウィンドウ内にある場合){ ws = 新しい WebSocket(url); } イベントハンドルを初期化します。 }キャッチ(e){ 再接続(url); コンソールログ(e); } } 関数initEventHandle() { ws.onclose = 関数(){ 再接続(wsUrl); console.log("llws 接続が閉じられました!"+new Date().toLocaleString()); }; ws.onerror = 関数(){ 再接続(wsUrl); console.log("llws 接続エラー!"); }; ws.onopen = 関数(){ heartCheck.reset().start(); //ハートビート検出のリセット console.log("llws 接続が成功しました!"+new Date().toLocaleString()); }; ws.onmessage = function (event) { // メッセージが受信されると、ハートビート検出がリセットされます heartCheck.reset().start(); // メッセージが受信されると、現在の接続が正常であることを意味します console.log("llws はメッセージを受信しました:" + event.data); if(event.data!='ポン'){ data = jsON.parse(event.data); とします。 } }; } // ウィンドウを閉じるイベントをリッスンします。ウィンドウが閉じられると、Websocket 接続をアクティブに閉じて、接続が切断される前にウィンドウが閉じられたときにサーバーが例外をスローするのを防ぎます。 window.onbeforeunload = 関数() { ws.close(); } 関数 reconnect(url) { if(lockReconnect) 戻り値: ロック再接続 = true; setTimeout(function () { //接続に失敗した場合は、再接続を続けます。リクエストが多すぎるのを避けるために遅延を設定します。createWebSocket(url); ロック再接続 = false; }, 2000); } //ハートビート検出 var heartCheck = { timeout: 1000, // 1分ごとにハートビートを送信します timeoutObj: null, serverTimeoutObj: null、 リセット: 関数(){ タイムアウトをクリアします(this.timeoutObj); タイムアウトをクリアします(this.serverTimeoutObj); これを返します。 }, 開始: 関数(){ var self = this; this.timeoutObj = setTimeout(function(){ //ここでハートビートが送信され、バックエンドがそれを受信すると、ハートビート メッセージが返されます。 //onmessage は返されたハートビートを取得します。これは接続が正常であることを意味しますws.send("ping"); console.log("ping!") self.serverTimeoutObj = setTimeout(function(){//一定時間後にリセットされない場合は、バックエンドがアクティブに切断したことを意味します ws.close(); //onclose が再接続を実行する場合は、ws.close() を実行する必要があります。再接続が直接実行されると、onclose がトリガーされ、2 回の再接続が発生します}, self.timeout) }, this.timeout) } } //クライアントメッセージを受信した後に呼び出されるメソッド @OnMessage パブリック void onMessage(String message, Session session) { if (message.equals("ping")) { }それ以外{ 。 。 。 。 } } システムは、Websocket が 1 分ごとに自動的に切断されることを検出しました。多くのブログを検索しましたが、すべて nginx の proxy_read_timeout を設定するように言われていましたが、この時間は長すぎるため、サーバーのパフォーマンスに影響します。ハートビート パケット メソッドを使用すると、クライアントは 1 分ごとにサーバーに ping メッセージを自動送信し、サーバーは pong を返す必要があります。その問題は解決できます。 以上がJS WebSocket切断の原因とハートビートの仕組みについての詳しい説明です。JS WebSocket切断の原因とハートビートの仕組みについてさらに詳しく知りたい方は、123WORDPRESS.COMの他の関連記事もぜひご覧ください! 以下もご興味があるかもしれません:
|
<<: Linux に setup.py プログラムをインストールする方法
>>: Linux に Python クローラー スクリプトを展開し、スケジュールされたタスクを設定する方法
目次1. 環境変数$PATH: 2. 環境変数を変更します。 3. bash_profileの目的要...
MySQL トランザクション分離レベルを表示する mysql> '%isolation...
(Web ページの読み込み中に、コンテンツが多すぎて読み込みと待機が続くことがあります。このとき、...
序文MySQLでは、準備、実行、割り当て解除を正式にはPREPARE STATEMENTと呼びます。...
目次1. はじめに2. 導入環境ツール4. 展開プロセス要約する1. はじめにNextcloud は...
この記事では、VUEの具体的なコードを共有して、下部吸引ボタンを実装する例を紹介します。具体的な内容...
ディスプレイ定義IDテーブルに定義された自動増分IDが上限に達した場合、次のIDを申請する際に得られ...
インターフェイス ドメイン名を構成する際、各パブリック プラットフォームはドメイン名に対する開発者の...
目次シナリオ要件glibc バージョンglibcのインストールglibc ソフトリンクシナリオ要件C...
ssh-secure シェルは、安全なリモート ログインを提供します。組み込みシステムを開発し、Li...
序文Linux が完全にセットアップされると、クローン機能を使用して短時間で複数の Linux を作...
まずmysqlの圧縮バージョンをダウンロードします。公式ダウンロードアドレスは123WORDPRES...
今日は、MySQL IN サブクエリの最適化に関するケーススタディを見ました。最初は少し懐疑的でした...
設定手順Linux システム: CentOS-7.0 MySQL バージョン: 5.7.21 Lin...
EXPLAIN は、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合す...