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 クローラー スクリプトを展開し、スケジュールされたタスクを設定する方法
目次概要0. JavaScriptとWeb開発の基礎1. Vueの基本概念Vue コア機能コンポーネ...
目次1. シナリオの説明: 2. 事例のデモンストレーション: 2.1. MySQLの障害発生前にデ...
requireJS には、baseURL というプロパティがあります。baseURL を設定すること...
1. サブクエリMySQL 4.1以降はサブクエリをサポートしていますサブクエリ:別のクエリ内にネス...
序文3 列レイアウトは、その名前が示すように、両側が固定され、中央が適応します。実際の開発では、3 ...
ウェブページ上のいくつかの要素の非表示、透明、その他のプロパティを制御する必要があることがよくありま...
これまでにも Docker 環境でいくつかのプロジェクトを実行したことはありますが、まだイメージをよ...
私はずっとDockerにはIPアドレスがないと思っていました。実はDockerのネットワークテンプレ...
解決: <head> に次のコードを追加します。コードをコピーコードは次のとおりです。 ...
1. コマンドの紹介passwd コマンドは、ユーザー パスワード、アカウント ロック、パスワードの...
脆弱性の紹介SigRed の脆弱性はワーム化可能であるため非常に危険です。つまり、ユーザーの介入なし...
目次序文導入ngram全文パーサー全文インデックスを作成する検索方法1. 自然言語検索(自然言語モー...
テキストシャドウテキストに影を追加します。テキストとテキスト装飾に複数のシャドウを追加することができ...
目次初期化初期化状態()初期化プロパティ()初期化データ()観察する()オブザーバーリアクティブを定...
目次1. Dockerをインストールする2. Jenkinsイメージファイルを取得する3. マウント...