我想把连接的socket客户端传递给nest js服务,我参考了这个问题https://stackoverflow.com/question....,但是我不明白如何从我的服务传递client:Socket
。
我有一个处理一些文件处理任务的公牛队列。一旦文件处理完成。我想通知谁发送该文件的用户。下面是我的WebSocket网关。在这里notifyJobStatus
被调用一旦工作完成。但我想将其发送到一个特定的客户端。为此,我需要从我的服务访问客户端。然后我可以将方法修改为类似于notifyJobStatus(status: string, client: Socket)
的内容。如果这种方法是错误的,请纠正我。
export class NotificationsService
implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect
{
@WebSocketServer() server: Server;
private readonly logger = new Logger(NotificationsService.name);
notifyJobStatus(status: string) {
//client.broadcast.to(client.id).emit('JobStatus', status);
this.server.emit('JobStatus', status);
}
afterInit() {
this.logger.log('Websocket Server Started,Listening on Port:3006');
}
handleDisconnect(client: Socket) {
console.log(`Client disconnected: ${client.id}`);
}
handleConnection(client: Socket, ...args: any[]) {
console.log(`Client connected: ${client.id}`);
}
}
2条答案
按热度按时间2g32fytz1#
这对我有效,对你也应该有效。假设我们有notifyModule,我想调用OrderModule中的队列
1.我在模块中导出了NotifyConsumer
1.然后我在订单模块中注册了队列,别忘了,它也注册在您的NotifyModule中。
注意:order-queue与答案无关,我只是复制了我的代码给你。
然后,我将notify-queue导入到我需要的订单控制器文件中
最后,我用了它,它的工作
p5fdfcr12#
如果这是您的网关,我猜它没有正确设置。NESTJS中的网关采用以下格式:
同时,由于您使用的是长队列来处理作业,因此可以从处理作业的长队列使用者发出作业状态,@SubscribeMessage('event to listen to')将侦听该使用者,并调用notifyJobStatus方法将状态发送给用户。