如何从控制器NestJS访问Socket.IO客户端ID? [英] How to access socket.io client id from controller NestJS?

查看:0
本文介绍了如何从控制器NestJS访问Socket.IO客户端ID?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发网络挂钩上的聊天支持。我使用聊天聚合器,这不是我的个人服务。因此,每次来自Support的任何消息都是在我的控制器中接收的,任务是通过websockets将该消息传递给我的客户端。问题是我不能向特定套接字发送消息,所以我需要知道它的id。 具有以下代码:

@Controller('chat')
export class ChatController {
    @UseInterceptors(CamelCaseConverterInterceptor)
    @Post()
    getExternalMessage(
        @Body() payload: WebhookChatMessageDto,
        @ConnectedSocket() client: Socket,
    ): void {
       ... code
    }
}

我希望获取当前套接字客户端ID,但看起来@ConnectedSocket()修饰器在控制器中不起作用。有什么想法吗?

推荐答案

您不需要在控制器方法中使用修饰符。第一个参数是套接字,第二个是有效负载。因此,在您的方法中:

getExternalMessage(
        client: Socket,
        payload: WebhookChatMessageDto,
    ): void {
       console.log(client.id); //client id
       client.emit(...); //emit to this client
    }
但如果要使用WebSocket终结点,则不应使用@Post(),而应使用@SubscribeMessage(‘omeMessage’)。在POST请求中,您将永远无法访问套接字客户端,因为这是通过不同端口进行通信,并且您不能将POST请求与用户Socket.IO连接配对

这篇关于如何从控制器NestJS访问Socket.IO客户端ID?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆