Node.js 如何获取客户端id?
我正在使用lib,我想进行如下私人聊天:客户端a向客户端B发送消息。Node.js 如何获取客户端id?,node.js,websocket,Node.js,Websocket,我正在使用lib,我想进行如下私人聊天:客户端a向客户端B发送消息。 在这里,我有一个ws.clients.forEach()方法可以向每个客户端广播,但是如何获取单个客户端的客户端id呢?当您设置聊天系统并且userA想要与userB聊天时,您必须有一个userA用户告诉服务器他们想要与userB聊天的标识符。如果ws库没有为每个连接的用户提供易于使用的标识符,然后,当用户连接到您的服务器时,您需要分配一个,然后以一种可以找到具有给定id的套接字的方式跟踪每个连接。一种简单的方法是创建一个映射
在这里,我有一个
ws.clients.forEach()
方法可以向每个客户端广播,但是如何获取单个客户端的客户端id呢?当您设置聊天系统并且userA想要与userB聊天时,您必须有一个userA用户告诉服务器他们想要与userB聊天的标识符。如果ws
库没有为每个连接的用户提供易于使用的标识符,然后,当用户连接到您的服务器时,您需要分配一个,然后以一种可以找到具有给定id的套接字的方式跟踪每个连接。一种简单的方法是创建一个映射对象,其中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。@shengang-太好了,很高兴我能帮上忙。