Node.js模块,用于2个客户端之间的通信

Node.js module for communicating between 2 clients?

本文关键字:客户端 之间 通信 2个 用于 js 模块 Node      更新时间:2023-09-26

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

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

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

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

  • 只转发来自客户端X到客户端Y的消息(反之亦然)
  • 只转发来自客户端A到客户端B的消息(反之亦然)
  • 等。

我对web套接字没有任何经验(我甚至不确定web套接字是否是我正在寻找的),但我确实有基本Node.js服务器的经验。

谢谢你的帮助!

在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);
      }
    }
  });
});

来自客户端的传出消息看起来像这样:

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

我没有测试,所以如果它给你带来麻烦,请告诉我。

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

插座。io是前进的方向。您可以通过在不同的端口上连接它们来隔离客户端通信。

客户端X只能到客户端Y - 端口1234

客户端A只能到客户端B - 端口1256

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

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

这个Stack Overflow线程可以帮助你进一步获得一个更长的WebRTC库列表。