. (1) 함수 longSock (URL, FN, 인트로 = '' ) { 2 = lockReconnect 송출 false로 //의 반복 방지 연결 . 3 송출 = timeoutFlag true로 . 4 timeoutSet =하게 는 null . 5 송출 reconectNum = 0 . 6 CONST 제한 시간 = 30000 // 타임 아웃 간격 재접속 . 7 송출 WS . 8 함수 재접속 () { . 9 IF (lockReconnect)가 반환 10 lockReconnect = 참 . 11 // 재접속되지 연결 과도한 요구 피하기 위해 제공된 지연 (12)은 IF (reconectNum <. 3 ) { 13은 의 setTimeout ( 함수 () { 14 timeoutFlag = true로 15 createWebSocket () 16 console.info (인트로 '$ {} 제 재접속 reconectNum +이다. (1) {$ } times`) . 17 reconectNum ++ 18은 lockReconnect = 거짓 . 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 하자 카운트 = 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 = 새로운 웹 소켓 (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는 이름 웹 소켓을 닫 쉽게 요구할 . 5 } 6. 7. CONST = wssCenter의 createSocket (WSS ': // URL `핸들러 '접수 센터 - 작은 카드 ") 8. 9. 10 (11). wssCenter.close (); // 단절