NestJS websocket 客户端消息监听器
NestJS websocket client message listener
我找到了这个答案Connect NestJS to a websocket server
按照您在第一个答案中所拥有的那样实施我的客户。第二个答案让我有点发泄。现在我的听众有问题。当套接字断开连接时,我想再次重新连接。正如您在示例中看到的,侦听器是在构造函数中实例化的。当我想重新连接时,这些侦听器不会重新实例化,我不知道如何实现。
或者如何以其他方式实例化监听器?或者甚至如何销毁该服务并构建一个新服务?
因此,您使用了 websocket (lib "ws")。
你可以重写你的服务
// socket-client.ts
import { Injectable } from "@nestjs/common";
import * as WebSocket from "ws";
import {timer} from 'rxjs'
@Injectable()
export class WSService {
// wss://echo.websocket.org is a test websocket server
private ws: WebSocket;
private isConnect = false;
constructor() {
this.connect()
}
connect(){
this.ws = new WebSocket("wss://echo.websocket.org");
this.ws.on("open", () => {
this.isConnect = true;
this.ws.send(Math.random())
});
this.ws.on("error", (message) => {
this.ws.close()
this.isConnect = false;
});
this.ws.on("close", (message) => {
timer(1000).subscribe(() => {
this.isConnect = false;
this.connect();
})
});
this.ws.on("message", (message) => {
//handler
});
}
send(data: any) {
this.ws.send(data);
}
getIsConnect(){
return this.isConnect;
}
}
您使用函数 connect() 创建新连接。当连接错误时,你关闭它,当关闭连接时,你会触发定时器等待1秒然后重新连接。
这是最简单的ws重连方式,但实际上导致socket断开连接,或者服务器忘记你的原因有很多。您必须实施乒乓以确保服务器不会忘记您,或者间隔检查 isConnect 然后重新连接
或者您可以使用 socket-io.client 因为它会自动为您处理重新连接。但要求服务器也实现套接字。
您可以在
中阅读更多内容
我找到了这个答案Connect NestJS to a websocket server
按照您在第一个答案中所拥有的那样实施我的客户。第二个答案让我有点发泄。现在我的听众有问题。当套接字断开连接时,我想再次重新连接。正如您在示例中看到的,侦听器是在构造函数中实例化的。当我想重新连接时,这些侦听器不会重新实例化,我不知道如何实现。 或者如何以其他方式实例化监听器?或者甚至如何销毁该服务并构建一个新服务?
因此,您使用了 websocket (lib "ws")。 你可以重写你的服务
// socket-client.ts
import { Injectable } from "@nestjs/common";
import * as WebSocket from "ws";
import {timer} from 'rxjs'
@Injectable()
export class WSService {
// wss://echo.websocket.org is a test websocket server
private ws: WebSocket;
private isConnect = false;
constructor() {
this.connect()
}
connect(){
this.ws = new WebSocket("wss://echo.websocket.org");
this.ws.on("open", () => {
this.isConnect = true;
this.ws.send(Math.random())
});
this.ws.on("error", (message) => {
this.ws.close()
this.isConnect = false;
});
this.ws.on("close", (message) => {
timer(1000).subscribe(() => {
this.isConnect = false;
this.connect();
})
});
this.ws.on("message", (message) => {
//handler
});
}
send(data: any) {
this.ws.send(data);
}
getIsConnect(){
return this.isConnect;
}
}
您使用函数 connect() 创建新连接。当连接错误时,你关闭它,当关闭连接时,你会触发定时器等待1秒然后重新连接。
这是最简单的ws重连方式,但实际上导致socket断开连接,或者服务器忘记你的原因有很多。您必须实施乒乓以确保服务器不会忘记您,或者间隔检查 isConnect 然后重新连接
或者您可以使用 socket-io.client 因为它会自动为您处理重新连接。但要求服务器也实现套接字。
您可以在
中阅读更多内容