我正在寻找一个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库列表。