1 関数 longSock(URL、のFn、イントロ= '' ){ 2 LET = lockReconnect falseに // 繰り返し接続を回避するには、 3 LET = timeoutFlag 真の 4 LET timeoutSet = ヌル 。5 reconectNum = 0ましょう 。6 CONSTタイムアウト= 30000 // タイムアウト間隔再接続 7 LET WS 。8 関数再接続(){ 9は、 IF(lockReconnect)を返す 10 lockReconnect = trueに 。11 // 再接続しません接続、過剰な要求を回避するために設けられた遅延 12は、 IF(reconectNum <3 ){ 13である のsetTimeout(関数(){ 14 timeoutFlag = trueに 15 createWebSocket() 16 console.info(イントロ`$ {}第1の再接続reconectNum +である。1 {$ } times`) 。17 reconectNum ++ 18は lockReconnect = falseに 19 }、5000)/ / ここで提供さは(MS)離間再接続 20である } 21である } 22である // ハートビート検出器 23は CONST heartCheck = { 24 タイムアウト:5000、// MS 25 :timeoutObj ヌル、 26であります serverTimeoutObj:ヌル、 27 リセット:関数(){ 28 てclearInterval(この.timeoutObj) 29 てclearTimeout(この.serverTimeoutObj) 30 リターン この 31 }、 32 スタート:関数(){ 33 CONST自己= この 34 LETカウント= 0 35 本 .timeoutObj =たsetInterval(()=> { 36 場合(<3カウント){ 37 であれば(ws.readyStateを=== 1 ){ 38 ws.send( 'ハートビート' ) 39 console.info( `$ {イントロダクション}ハートビート第$ {+ 1カウント次の`}) 40 } 41 カウント++ 42 } 他{ 43 てclearInterval(この.timeoutObj) 44 カウント= 0 45 もし(=== ws.readyState === 0 && ws.readyState 1 ){ 46 ws.close() 47 } 48 } 49 }、self.timeout) 50 } 51 } 52 CONST createWebSocket =()=> { 53 console.info( `$ {イントロダクション}创建11 ') 54 timeoutSet =のsetTimeout(()=> { 55 であれば(timeoutFlag && reconectNum <3 ){ 56 console.info(` $ {イントロ}重连22`) 57 reconectNum ++ 58 createWebSocket() 59 } 60 }、タイムアウト) 61 、WS = 新規のWebSocket(URL) 62 63 ws.onopen =()=> { 64 reconectNum = 0 65 timeoutFlag = 偽 66 clearTimeout(timeoutSet) 67 heartCheck.reset()(開始)。 68 } 69 ws.onmessage = EVT => { 70 heartCheck.reset())(開始。 71 // console.info(EVT)。 72 場合(evt.data === 'ハートビート')を返す 73 FN(EVT、WS) 74 } 75 ws.onclose = E => { 76 console.info( `$ {イントロダクション}关闭11 '、e.code)を 77 であれば(e.code!== 1000年){ 78 timeoutFlag = 偽 79 てclearTimeout(timeoutSet) 80 再接続() 81 } 他{ 82 てclearInterval(heartCheck.timeoutObj) 83 てclearTimeout(heartCheck.serverTimeoutObj) 84 } 85 } 86 ws.onerror = 関数(){ 87 console.info( `$ {11 '错误イントロ}) 88 再接続()// 重连 89 } 90 } 91 createWebSocket() 92の 戻りWS 93 } 94輸出デフォルト longSock
1 // メソッド呼び出し 2 CONST =ハンドラ(EVT、WS)=> { 3。 // EVTはwebsockettデータである 4つの。 // WS名が用WebSocketを閉じることが容易である要求 5。 } 6。 7。 CONST = wssCenterのcreateSocket(WSS `:// URL `、ハンドラ、 '受付センター-小カード') 8。 9。 10 11。 wssCenter.close(); // 切断