用于在2个客户端之间进行通信的Node.js模块?

我正在寻找一个Node.js模块(或一个build议/想法),以便我的服务器可以创build/处理特定客户端之间的双向通信

换句话说,我希望能够将来自客户端X的数据传输到客户端Y,反之亦然。

我正在查看socket.io但它似乎是一个传统的networking套接字服务器,从所有客户端接收消息,然后发送相同的消息到所有客户端。 我可能是错的,因为我没有这方面的经验。

在我的情况下,我确实希望我的服务器能够接收来自不同客户端的消息,但是我希望服务器将这些消息转发给特定的客户端。

例如

  • 转发仅从客户端X到客户端Y的消息(反之亦然)
  • 转发msg只从客户端A到客户端B(反之亦然)
  • 等等

我没有与networking套接字的经验(我甚至不知道是否是networking套接字是我正在寻找),但我有基本的Node.js服务器的经验。

谢谢你的帮助!

在Node.js WebSocket服务器中,由于您正在对服务器进行编码,因此您可以完全控制谁收到什么消息。 你可以做这样的事情…

当客户端与服务器build立WebSocket连接,并将连接对象存储在一个数组中时,可以将其连接的索引视为其ID。 如果你愿意,你可以把这个ID(和他们的IP地址)广播给那个地方的所有其他客户,让他们知道谁已经连接。 然后,当客户想要发送消息到另一个客户端或客户端时,让客户端进行消息传递包括目标客户端和消息。 以下是服务器的相关部分:

 var client_list = []; ws_server.on('request', function(request) { var connection = request.accept(null, request.origin); //let all other clients know that a new client has arrived //send the new client's ID and IP address for(var i = 0; i < client_list.length; i++) { client_list[i].send(JSON.stringify({ type: "new client", data: { ID: client_list.length, IP: connection.remoteAddress } })); } //store the new connection client_list.push(connection); //let the new client know what their ID is connection.send(JSON.stringify({ type: "assignment", data: { ID: client_list.length - 1 } })); //when you receive a message from a client of type "relay", //send it to the intended targets connection.on("message", function(message) { var parsed_message = JSON.parse(message.utf8Data); if(parsed_message.type === "relay") { for(var i = 0; i < parsed_message.targets.length; i++) { client_list[parsed_message.targets[i]].send(parsed_message.data); } } }); }); 

来自客户端的传出消息如下所示:

 { type: "relay", targets: [1, 33, 7], data: { content: "Hey guy!", origin: my_id } } 

我没有testing,所以让我知道,如果它给你的麻烦。

我也是NodeJ的新手。 简要回答你的问题

Socket.io是前进的方向。 您可以通过连接不同的端口来隔离您的客户端通信。

客户端X到客户端Y仅 – 端口1234

客户端A到客户端B只 – 端口1256

问候

Socket.io将帮助您在多个客户端和一个服务器之间设置websocket,以便您可以在连接的实例之间实时同步数据。 这是一个客户端 – 服务器通信

我想你想要的是一个WebRTC库,比如PeerJS 。 这个特别设置了一个握手服务器,使用Node.js桥接两个客户端之间的连接,并让它们自己从这一点进行通信,只要websocket持续(即刷新将断开连接)。 这个库可以帮助您实现客户端 – 客户端的实时通信。

这个堆栈溢出线程可以帮助您进一步使用更长的WebRTC库列表。