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 クローラー スクリプトを展開し、スケジュールされたタスクを設定する方法
この記事では、簡単なドラッグ効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...
日常業務でファイルをダウンロードする一般的な方法は 2 つあります。 1 つ目は、サーバーのファイル...
前回の記事では、https を使用したローカルノードサービスアクセスを実装しました。前回の記事の効果...
固定サイドバーを実装するにはJavaScriptを使用します。参考までに、具体的な内容は次のとおりで...
今日、Ubuntu 用の小さなツールを顧客に送りましたが、ユーザーはそれを受け取った後、実行できませ...
概要この記事は、centos7.3 上で mysql5.3.6 を自動的にコンパイルしてインストール...
新しいLinuxサーバーを入手する場合、通常は次の5つの構成を実行する必要があります。 HOSTAN...
前面に書かれたコードがどれだけ適切に記述されていても、すべての可能性のある例外を完全に処理することは...
Linux topコマンドの紹介top コマンドは、Linux でよく使用されるパフォーマンス分析ツ...
概要MySQL の最も強力な機能の 1 つは、データ取得を実行しながらテーブルを結合できることです。...
目次1. インデックスの種類1. B+ツリー2. MyISAM と InnoDB の B+ ツリー ...
目次1. クロージャを使用する2. ES6クラスを使用する3. ES2020提案を使用する4. We...
voidキーワードの紹介まず、void キーワードは JavaScript で非常に重要なキーワード...
序文最近、MySQL に関するメモをいくつか尋ねる人がいたので、ブログ記事を書かなければなりません。...
選択ドロップダウン リスト フォームは誰もがよく知っているかもしれませんが、デフォルトのドロップダウ...