我正在寻找Node.js模块(或建议/想法),以便我的服务器可以创建/处理特定客户端之间的双向通信
换句话说,我希望能够将来自客户端X的数据传输到客户端Y,反之亦然。
我正在调查socket.io
但它似乎是一个传统的Web套接字服务器,它接收来自所有客户端的消息,然后将相同的消息发送给所有客户端。我可能错了,因为我没有这方面的经验。
就我而言,我确实希望我的服务器能够接收来自不同客户端的消息,但我希望服务器将这些消息转发给特定客户端。
e.g。
我对网络套接字没有经验(我甚至不确定网络套接字是否是我正在寻找的)但我确实有基本Node.js服务器的经验。
感谢您的帮助!
答案 0 :(得分:1)
我也是NodeJs的新手。简要回答你的问题
Socket.io 是前进的方向。您可以通过在不同端口上连接来隔离客户端通信。
客户端X仅限客户端Y - 端口1234
仅客户端A到客户端B - 端口1256
此致
答案 1 :(得分:1)
Socket.io 将帮助您在多个客户端和服务器之间设置websockets,以便您可以在连接的实例之间实时同步数据。这是客户端 - 服务器通信。
我认为您想要的是 WebRTC 库,例如PeerJS。这个特别设置了一个握手服务器,使用Node.js桥接两个客户端之间的连接,并让他们自己从那一点进行通信,只要websocket持续(即:a)刷新会打破连接)。该库可以帮助您实现客户端 - 客户端实时通信。
This Stack Overflow thread可以帮助您进一步了解更长的WebRTC库列表。
答案 2 :(得分:1)
在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
}
}
我没有测试过,所以如果它给你带来麻烦,请告诉我。