Javascript Node.js模块,用于在两个客户端之间进行通信?

Javascript Node.js模块,用于在两个客户端之间进行通信?,javascript,node.js,websocket,Javascript,Node.js,Websocket,我正在寻找Node.js模块(或建议/想法),以便我的服务器可以创建/处理特定客户端之间的双向通信 换句话说,我希望能够将来自客户端X的数据传输到客户端Y,反之亦然 我正在研究socket.io,但它似乎是一个传统的web套接字服务器,它从所有客户端接收消息,然后向所有客户端发送相同的消息。我可能错了,因为我在这个领域没有经验 在我的例子中,我确实希望我的服务器能够接收来自不同客户端的消息,但我希望服务器随后将这些消息中的每一条转发给特定的客户端 e、 g 仅将来自客户端X的消息转发给客户端Y

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

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

我正在研究
socket.io
,但它似乎是一个传统的web套接字服务器,它从所有客户端接收消息,然后向所有客户端发送相同的消息。我可能错了,因为我在这个领域没有经验

在我的例子中,我确实希望我的服务器能够接收来自不同客户端的消息,但我希望服务器随后将这些消息中的每一条转发给特定的客户端

e、 g

  • 仅将来自客户端X的消息转发给客户端Y(反之亦然)
  • 仅将来自客户端A的消息转发给客户端B(反之亦然)
  • 等等
我没有使用web套接字的经验(我甚至不确定web套接字是否是我要找的),但我确实有使用基本Node.js服务器的经验


谢谢你的帮助

我对NodeJs也是新手。简单回答你的问题


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

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

仅客户端A到客户端B-端口1256


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

我认为您需要的是一个WebRTC库,例如。这一个特别设置了一个握手服务器,使用Node.js桥接两个客户端之间的连接,并让它们从该点开始自己通信,只要websocket持续(即:刷新将中断连接)。此库可帮助您实现客户端实时通信


可能有助于您进一步了解更长的WebRTC库列表。

在Node.js WebSocket服务器中,由于您正在对服务器进行编码,因此您可以完全控制谁获取哪些消息。你可以这样做

当客户端与服务器建立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);
      }
    }
  });
});

我没有对此进行测试,所以如果它给您带来麻烦,请告诉我。

我想这取决于OP想要发送多少数据。如果您对我的代码是否损坏有任何后续问题,请告诉我。我会做的,Jason,我还没有时间检查它,但我会在实施您的解决方案后立即发表评论。谢谢,但看起来这正是我要找的。。!据我所知,我对Node.js比较陌生,对在生产环境中扩展Node.js也完全陌生,可能需要有多个Node.js服务器实例。如何处理跨这些服务器实例共享打开的web套接字?也许我应该把这个问题推到它自己的问题上。。。另请参见“生产应用程序,以及运行多个web dyno的应用程序,需要一个体系结构来解释dyno之间的共享状态”()。
{
  type: "relay",
  targets: [1, 33, 7],
  data: {
    content: "Hey guy!",
    origin: my_id
  }
}