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秒以内に実行されず、操作タイマーがリセットされます