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