NestJs Websocket,如何测试和调试“Socket hang up”?
Posted
技术标签:
【中文标题】NestJs Websocket,如何测试和调试“Socket hang up”?【英文标题】:NestJs Websocket, how to test and debug "Socket hang up"? 【发布时间】:2022-01-20 11:51:09 【问题描述】:我有一个相当简单的 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 来使用邮递员进行连接
ws://localhost:5010
导致此错误socket hang up
不太确定它为什么会这样,也没有足够的信息来调试它。
如果有人能分享关于在哪里看的提示,我将不胜感激。
我在 macOS Monterey:12.0.1(最后更新)
已安装的 Websocket 库:
@nestjs/platform-socket.io:8.2.4
@nestjs/websockets": 8.2.4
谢谢
【问题讨论】:
【参考方案1】:通过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)
)
)
this example is based on this answer
【讨论】:
以上是关于NestJs Websocket,如何测试和调试“Socket hang up”?的主要内容,如果未能解决你的问题,请参考以下文章
NESTJS 网关/Websocket - 如何通过 socket.emit 发送 jwt access_token
Nestjs websocket网关,如何从握手中解析签名cookie以进行保护授权?
如何在 nrwl monorep 中调试 NestJS 应用程序
如何在 Microsoft Visual Studio 2019 中调试 nestjs 程序?
WebSocket SocketIO 连接不适用于 Heroku 上的 NestJS 服务器并在 Vercel 上反应客户端