jsが実質的文言のWebSocket遠位ハートビート機構を追加しました

1はじめに

通常は自動的に切断のWebSocketは、何も操作が破壊から防ぐために、ハートビート・メカニズムを追加する必要はありません、すべて90です

 

2.実験方法

(1)行のJSPまたはHTMLファイルを設定、追加元素

 

(2)ソースコードをJS、[View]をクリックします

  1  // 避ける複製リンク
  2  VAR lockReconnect = falseに;
   3  // パス
  4  VAR wsUrl = $( "#wsUrl" ).val();
   5はconsole.log( "パス" + wsUrl);
   6  // のWebSocketオブジェクト
  7  VAR WS;
   8  // インターバル
  9  のvar TT;
 10  
。11  IF( "のWebSocket" における窓){
 12がある      にconsole.log( "支持用WebSocket" 13である } {
 14      アラート( "ブラウザがサポートしていないのWebSocket"15  }
 16  
17。 // コネクタWS作成
18れる VAR createWebSocket = 関数(wsUrl){
 19。     トライ{
 20は         // 成功
21は、          WS = 新しい新A用WebSocket(wsUrl);
 22である          webSocketInit(); // 初期化機能用WebSocketコネクタ
23は      } キャッチ( E){
 24          //が失敗
25          にconsole.log( 'キャッチ' );
 26であるが         // 再接続
27          // 再接続機能
28          webSocketReconnect(wsUrl)。
29      }
 30  };
 31  // 初期化方法であって、後に正常に実行
32  VAR webSocketInit = 関数(){
 33である     // 接続クローズ機能
34は      ws.onclose = 関数(){
 35          はconsole.log( "接続が閉じられました..." );
 36          webSocketReconnect(wsUrl)// 接続は、閉じた再接続である場合に
37      };
 38      // 接続エラー関数
39      ws.onerror = 関数(){
 40          はconsole.log( "接続エラー..." );
 41である          webSocketReconnect( wsUrl)// 接続エラーが再接続の場合
42      ;}
 43      // 接続確立、送信情報
44が      ws.onopen = 関数(){
 45          VARメッセージ1 = {
 46は、              "SUB": "タイプ" 47              " -サービス":「ビジネス1 -第一の送達確認情報"
 48          };
 49          ws.send(JSON.stringify(メッセージ1)); // のWebSocketサービス加入は-複数のサービスを有していてもよい
50          // メッセージ2 {VAR = 
51である         //      "タイプ「: "SUB"、
52は         //      ":"「-serviceサービス2」
53          // }。
54          //ws.send(JSON.stringify(メッセージ2)); 
55          // ハートビートが開始
56であり          ; heartCheck.start()// サブスクリプションサービスの後にハートビート伝達機構開始
57      };
 58      // 正常サービス加入サーバプッシュメッセージを受信した後実際ストリング
59      ws.onmessage = 関数(EVT){
 60          はconsole.log(+ 'メッセージが受信' evt.data)を、
 61である          $( "#スパン" )の.html(evt.data);
 62である         // JSON.parseデータ= VAR(evt.data); 
63である         // IF(DATA.service == "サービス1"){ 
64          //      はconsole.log( "1トラフィックデータを受信"); 
65          //      //受信データ・サービス1、および関連するロジック
66          // } 
67          // IF(DATA.service == "サービス2"){ 
68          //      はconsole.log( "1トラフィックデータを受信"); 
69          //      2 @受信されたデータトラフィック、および関連します処理ロジック
70          // } 
71          // ハートビート後プッシュメッセージ背面、即ちリセットを受信し
72  
73である         heartCheck.reset();
 74      };
 75  
76  };
 77  
78  
79  VAR webSocketReconnect = 関数(URL){
 80      console.log( "ソケット切断、再接続の試みがある" );
 81      IF (lockReconnect){
 82          リターン;
 83      }
 84      lockReconnect = trueに;
 85      // 常に背中にしても、接続された遅延を設定していない、あまりにも多くの要求を回避するだろう
86  
87      //
 88      // タイマー設定のための明確トリガーSのsetTimeout、タイマーを追加する理由、第二のタイマを割り当てるやすいです。
89      // ダイレクトてclearTimeout(タイマー)が再びタイマーがエラーへのアクセスがないことをこと。
90      // &&タイマが不定となり、その後てclearTimeout(タイマー)のタイマー
91は、      TT && ;てclearTimeout(TT)
 92      TT = setTimeoutメソッド(関数(){
 93         createWebSocket(URL);
 94      }、4000 )、
 95  };
 96 
97  
98  // ハートビートいわゆるビート検出器は、定期的に長い時間が自動的に切断WSの原因が使用されていないので、一度だけサーバデータにアクセスされる
99  // 一般的に何も操作が90秒間隔で自動的に切断されていませんオープンこのため、データアクセスの時間間隔内で行わ、WSを防ぐために切断することができ、
100  // カウントダウンの30秒以内に、30秒を選んで訪問のための操作ではありません、タイマーが作動してリセットされ、
101  //
 102  // キーと値のペアとしてパッケージ、物体が非常に似てJSONと、JSなる
103  VAR heartCheck = {
 104      タイムアウト:30000、// 30秒
105      timeoutObj:ヌル106      RESET:関数(){ //は、受信が成功しプッシュは、心拍検出カウントダウン30秒にリセットされます
107          てclearTimeout(この .timeoutObjを); //カウントダウンがリセット
108          この.start();
 109      }
 110      スタート:関数(){ // スタートハートビート機構は、カウントダウン30秒提供される
111は         、この .timeoutObj = setTimeoutメソッド(関数(){
 112              VARのメッセージ= {
 113                  "タイプ":" t10010 " 114                  " -service ":"ハートビートサービス==「+実行し、新たな新A日付()
 115             };
 1 16 // 効果JSON.stringify()はJSON文字列にJavaScriptオブジェクトを変換することである117 // JSON.parse()オブジェクトにJSON文字列であってもよい。118              
             
             console.log( "ハートビート" );
 119              ws.send(JSON.stringify(メッセージ)); // ハートビート開始
120          }、この.timeout)
 121      }
 122      // 場合に開く時の接続には、速やかに、起動開始しますタイミング範囲内のonMessageは、サーバにメッセージを取得した
123      // カウントダウンリセットリセット後に、後端からの最後のメッセージ30秒から取得が壊れ参照しないように、ハートビート検出を行います。
124  };
 125  
126  // のWebSocketコネクタ作成を開始
127  createWebSocket(wsUrl)を、
 128  // / 
129  機能mysend(){
 130      VARのテキスト= $( "#テキスト" ).val();
 131のIS     console.log( "テキスト:" + テキスト);
 132      // WS情報を送信
133      ; ws.send(テキスト)
 134  
135 }
コードの表示

 

 (3)テストショット。

 

 

 

 

3.経験

原因が長期間使用されていないため、いわゆるビート検出器は、データ・アクセスは、随時サーバに行われ、自動的に切断WS 
一般的に何も操作が自動的に90秒以内の間隔で切断されていない、それによって時間間隔でデータを一度、断線缶WSを防止するためのアクセス
30秒を選ぶには、何も操作が訪問カウントダウン30秒以内に実行されず、操作タイマーがリセットされます

 

おすすめ

転載: www.cnblogs.com/c2g5201314/p/12304425.html
おすすめ