如何在 nodejs websocket 上指定消息目的地?

How to specify message destination on the nodejs websocket?

我想从nodejs后端发送消息到指定的websocket通道。所以我想在 spring SimpMessagingTemplate 上 implement/use 类似 convertAndSend function 的功能。

我尝试用 ws lib, but the send function 实现这个,只有两个参数:消息和回调,我无法指定消息目的地。这是后端代码的一个简短示例:

const wss = new WebSocket.Server({
    port: 8081,
    server: app,
    path: '/ws',
    /*...*/
});
/*...*/
wss.send(`chat-room/${roomId}`, JSON.stringify(message)); // I want to this

这里是一个运行良好的简短前端代码:

/*...*/
this.rxStomp.configure({
  brokerURL: 'ws://localhost:8081/ws',
  /*...*/
});
this.rxStomp.activate();
/*...*/
return this.rxStomp.watch(`chat-room/${roomId}`);

所以我的问题是:可以在 nodejs 上用 ws 或其他库指定消息目的地吗?如果是那么怎么办?

我没用过'Convert and send'和'Web Socket'模块(我个人用的是socket.io),但概念应该是一样的。

基本流程是

  1. 用户连接到套接字服务器(获取分配给他们的套接字 ID)

  2. 在一个动作中,假设从客户端应用程序 'joinroom' 向 websocket 服务器执行 'emit' 命令(这是 socket.io 语法)例如

     socket.emit('joinRoom',roomID,otherparams)
    

在上面的示例中,我们是'emitting'向我们的'socket'服务器发出请求,在上面的示例中'socket'是我们套接字连接的命名空间,所以socket.emit 向socket服务器发送请求

  1. 我们的套接字服务器有代码 'listen' 请求 'joinRoom' 使用 'on' 语法 eg

    socket.on('joinRoom',(roomID,otherparams)=>{
    //perform action, eg. query DB for room chats etc
    // once action is done, emit back to user
       socket.in(roomID).emit(data)
    }) 
    

在上面的代码中,我们有一个 'on' 事件,它是套接字服务器上的 'listener',这将监听 'emits' 到这个动作,所以我们从客户端运行 一个 'emit' 到套接字服务器,套接字服务器找到动作(事件) 'joinRoom' 和 运行 代码,代码成功后它会找到所有用户'in' 房间(传递给发射器的 roomID)并将其发送给所有 'sockets' 'in' 那个房间

  1. 在您的客户端上,您也有 'on' 个侦听器,因此当套接字服务器 'emits' 到客户端时,它们正在侦听那些特定命令。因为 'socket.in' 仅 'emits' 到 'in' 房间的客户只有那些用户从服务器获得新的有效负载

您的应用程序将以这种方式继续,发出并触发事件。这是基本流程,可以用于 1 对 1 聊天、群聊等