我正在使用ws
库,并且希望像这样进行私人聊天:客户端A向客户端B发送消息。
我有一种ws.clients.forEach()
方法可以广播给每个客户端,但是如何获取单个客户端的客户端ID?
答案 0 :(得分:0)
设置聊天系统并且userA要与userB聊天时,必须具有一个标识符,以便userA用户告诉服务器他们希望与userB聊天。如果ws
库没有为每个连接的用户提供易于使用的标识符,那么您需要在用户连接到服务器时分配一个标识符,然后以一种可以找到的方式跟踪每个连接的标识符具有给定ID的套接字。一种简单的方法是只创建一个Map对象,其中key是ID,而value是套接字。然后,您可以按ID查找任何套接字。
例如,您可以为每个传入的套接字连接创建唯一的ID,并按以下方式存储它:
const uuid = require("uuid/v4");
const wss = new WebSocket.Server({ port: 8080 });
const idMap = new Map();
wss.on('connection', function connection(ws) {
// create uuid and add to the idMap
ws.uuid = uuid();
idMap.add(ws.uuid, ws);
ws.on('close', function() {
// remove from the map
idMap.delete(ws.uuid);
});
ws.on('message', function(info) {
try {
info = JSON.parse(info);
if (info.action = "send") {
let dest = idMap.get(info.targetId);
if (dest) {
dest.send(JSON.stringify({action: "message", sender: ws.uuid, data: info.message}));
}
}
} catch(e) {
console.log("Error processing incoming message", e);
}
});
});
然后,您可以在内部使用该uuid值来标识某人想要连接或发送到的用户。
在大多数实际应用程序中,您还将创建某种登录名和用户名。唯一的用户名也可以用作ID。