NestJs Websocket,如何测试和调试"Socket hang up"?



我有一个相当简单的Websocket服务器,我所要实现的只是有一个套接字网关,它将根据数据库状态更新向侦听/连接的客户端发送事件。

这是我的实现:

@WebSocketGateway(5010, { transports: ['websocket'], cors: true })
export class SocketGateway
implements OnGatewayConnection, OnGatewayDisconnect
{
private readonly logger: Logger = new Logger(SocketGateway.name);
@WebSocketServer() server: Server;
constructor(private readonly socketService: SocketService) {}
@SubscribeMessage('statusUpdate')
updateStatus(data: any) {
this.server.emit('statusUpdate', data);
}
handleConnection(client: any, ...args: any[]): any {
return this.logger.log(`Client disconnected: ${client.id}`);
}
handleDisconnect(client: any): any {
return this.logger.log(`Client connected: ${client.id}`);
}
}

现在我正试图通过连接到此URL使用poster进行连接ws://localhost:5010

导致该错误socket hang up不确定它为什么会这样,也没有足够的信息来调试它。如果有人能告诉我该去哪里看,我将不胜感激。

我在macOS蒙特利:12.0.1(上次更新(

已安装的Websocket libs:

@nestjs/platform-socket.io:8.2.4

@nestjs/websockets":8.2.4

感谢

通过e2e测试,您可以尝试以下示例:

import * as WebSocket from 'ws'
beforeAll(async () => {
const moduleFixture = await Test.createTestingModule({
imports: [
SocketModule,
],
}).compile()
app = moduleFixture.createNestApplication()
app.useWebSocketAdapter(new WsAdapter(app))
await app.init()
})
it('should connect successfully', (done) => {
const address = app.getHttpServer().listen().address()
const baseAddress = `http://[${address.address}]:${address.port}`
const socket = new WebSocket(baseAddress)
socket.on('open', () => {
console.log('I am connected! YEAAAP')
done()
})
socket.on('close', (code, reason) => {
done({ code, reason })
})
socket.on ('error', (error) => {
done(error)
})
})

这个例子是基于这个答案

最新更新