Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在nodejs websocket上指定消息目的地?_Node.js_Websocket_Message_Ws - Fatal编程技术网

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

Node.js 如何在nodejs websocket上指定消息目的地?,node.js,websocket,message,ws,Node.js,Websocket,Message,Ws,我想将消息从nodejs后端发送到指定的websocket通道。因此,我想实现/使用类似于spring SimpMessageTemplate的功能 我试图用实现这一点,但只有两个参数:message&callback,我无法指定消息目的地。下面是一个来自后端代码的简单示例: const wss = new WebSocket.Server({ port: 8081, server: app, path: '/ws', /*...*/ }); /*...*/ ws

我想将消息从nodejs后端发送到指定的websocket通道。因此,我想实现/使用类似于spring SimpMessageTemplate的功能

我试图用实现这一点,但只有两个参数:message&callback,我无法指定消息目的地。下面是一个来自后端代码的简单示例:

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或其他lib指定消息目的地?如果是,那么如何使用?

我没有使用“转换并发送”或“Web套接字”模块(我个人使用Socket.io),但概念应该是相同的

基本流程是

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

  • 在一个动作中,让我们说“joinroom”,从客户端应用程序执行一个“emit”命令到websocket服务器(这是socket.io语法),例如

  • 在上面的示例中,我们正在向“socket”服务器“发出”请求,在上面的示例中,“socket”是套接字连接的名称空间,因此socket.emit将请求发送到套接字服务器

  • 我们的socket服务器有代码使用“on”语法“监听”到“joinRoom”的请求,例如

     socket.emit('joinRoom',roomID,otherparams)
    
    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”事件,它是套接字服务器上的“侦听器”,它将侦听此操作的“emit”,因此我们从客户端向套接字服务器运行了一个“emit”,套接字服务器找到了操作(on event)“joinRoom”并运行了代码,在代码成功后,它将在“room”中找到所有用户(传递给emit的roomID)并将其发送到该房间中的所有“套接字”

  • 在您的客户端上,您也有“开”侦听器,因此当套接字服务器“发射”到客户端时,它们正在侦听这些特定命令。因为“socket.in”仅“发射”到“在”房间中的客户端,只有这些用户从服务器获得新的有效负载

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

    我忘了提到我也尝试了socket.io,应该很好,但客户端无法连接到socket.io websocket。我总是在建立连接之前关闭连接,并且出现错误尝试了几种解决方案来解决这个问题,但没有任何效果。