Node.js 如何获取客户端id?

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

我正在使用lib,我想进行如下私人聊天:客户端a向客户端B发送消息。

在这里,我有一个
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-太好了,很高兴我能帮上忙。