将标识符添加到websocket

将标识符添加到websocket,websocket,socket.io,ws,Websocket,Socket.io,Ws,我正在使用Node.jsws库,在第三方API上侦听用户帐户中的事件。对于每个用户,我打开一个websocket来监听用户帐户中的事件 事实证明,第三方API并没有为每个事件提供用户ID,因此如果我有10个到用户帐户的websocket连接,我无法确定事件来自哪个帐户 在启动每个连接之前,我可以访问唯一的用户ID 是否有一种方法可以将带有userId标识符的websocket连接附加或包装到我建立的每个连接中,这样当我收到事件时,我就可以访问自定义标识符,并随后知道事件来自哪个用户的帐户 下面的

我正在使用Node.js
ws
库,在第三方API上侦听用户帐户中的事件。对于每个用户,我打开一个websocket来监听用户帐户中的事件

事实证明,第三方API并没有为每个事件提供
用户ID
,因此如果我有10个到用户帐户的websocket连接,我无法确定事件来自哪个帐户

在启动每个连接之前,我可以访问唯一的
用户ID

是否有一种方法可以将带有
userId
标识符的websocket连接附加或包装到我建立的每个连接中,这样当我收到事件时,我就可以访问自定义标识符,并随后知道事件来自哪个用户的帐户

下面的代码是真实代码和伪代码的混合(即
customSocket

查看
socket.io
库,
namespace
功能可能会解决这个问题,但我无法确定这是否正确。以下是其文档中的一个示例:

// your application has multiple tenants so you want to dynamically create one namespace per tenant

const workspaces = io.of(/^\/\w+$/);

workspaces.on('connection', socket => {
  const workspace = socket.nsp;

  workspace.emit('hello');
});

// this middleware will be assigned to each namespace
workspaces.use((socket, next) => {
  // ensure the user has access to the workspace
  next();
});

我找到了一个相当简单的解决方案。首先创建一个消息处理程序函数:

const eventHandler = (uid, msg) => {
  console.log(`${uid} did ${msg}`);
};
然后,在为给定用户创建websocket时,使用处理程序包装
.on
事件:

const createSocketForUser = (uid, eventHandler) => {
  const socket = new WebSocket(/* ... */);
  socket.onmessage = (msg) => {
    eventHandler(uid, msg)
  };
  return socket;
}
const createSocketForUser = (uid, eventHandler) => {
  const socket = new WebSocket(/* ... */);
  socket.onmessage = (msg) => {
    eventHandler(uid, msg)
  };
  return socket;
}