웹소켓 봉인 과정을 기록합니다
1. 포장.먼저 socket을 만듭니다.ts 파일
import EventEmitter from 'events'; // events
const ee = new EventEmitter();
class Ws {
private wsUrl: string = '';
private socket: WebSocket | undefined; // socket
private lockReconnect: boolean = false; //
private timeout: NodeJS.Timeout | undefined;
// socket, , wsUrl
public init(wsUrl: string) {
this.wsUrl = wsUrl;
this.createWebSocket();
}
// socket
public getInstance(): Promise<WebSocket> {
return new Promise((resolve, reject) => {
if (this.socket) {
resolve(this.socket);
} else {
ee.on('socket', (state: string) => {
if (state === 'success') {
resolve(this.socket);
} else {
reject();
}
});
}
});
}
// socket
private createWebSocket() {
try {
console.log('websocket ');
const socket = new WebSocket(this.wsUrl);
socket.addEventListener('close', () => {
console.log('websocket ');
this.socket = undefined;
this.reconnect();
});
socket.addEventListener('error', () => {
console.log('websocket ');
this.socket = undefined;
this.reconnect();
});
socket.addEventListener('open', () => {
//
// this.heartCheck.start();
console.log('websocket open');
this.socket = socket;
ee.emit('socket', 'success');
});
socket.addEventListener('message', (event) => {
console.log('websocket ', event);
});
} catch (e) {
console.log('socket catch error', e);
this.reconnect();
}
}
//
private reconnect() {
if (this.lockReconnect) {
return;
}
console.log('websocket ');
this.lockReconnect = true;
// ,
this.timeout && clearTimeout(this.timeout);
this.timeout = setTimeout(() => {
this.createWebSocket();
this.lockReconnect = false;
}, 5000);
}
}
export default new Ws();
2. 도입 및 사용
import socket from '@/utils/ws';
socket
.getInstance()
.then((ws) => {
// ws websocket, websocket api
console.log('getInstance ws', ws);
ws.addEventListener('message', (event) => {
console.log('ws ', event);
});
})
.catch(() => {});
이상은 웹소켓 봉인 과정의 상세한 내용을 한 번 기록하는 것입니다. 웹소켓 봉인에 관한 더 많은 자료는 저희 다른 관련 글에 주목하세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
iPad에서 WebSocket + Authorization이 연결되지 않음발단은 iPad에서의 개발 환경을 정비하려고 했기 때문이었습니다. VPS에 개발 환경을 넣을 수 있으면 편리하다고 생각해, 를 인스톨 해, 그대로는 누구라도 사용할 수 버리므로, Apache를 리버스 프록시로 해, ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.