我正在通过快捷插件ws
使用express-ws
。我的后端需要跟踪客户端,并且仅将消息发送给特定的或客户端。现在,我只是保存客户端套接字以及令牌。因此,当客户端连接时,客户端将发送如下消息:
{"path":"/openUserSocket","token":"<CLIENT_TOKEN_VALUE>"}
这将在后端注册一个套接字。套接字由类wscManager
管理,该类将套接字保存在一个普通对象中。因此,要注册一个套接字,请执行以下操作:
// adding web socket support
const expressWs = require('express-ws')(app, null, {
wsOptions: {
clientTracking: true
}
});
let man = new wscManager();
// then in the web socket handler
app.ws('/', (sck,req) => {
sck.on('message',(msg)=>{
// handle messages
if(msg.path === '/openUserSocket'){
man.set(msg.token, sck);
return sck.send(JSON.stringify({ status: 200, message: 'Ok' }));
}
else if(msg.path === '/<SOME_OTHER_PATH>'){
// use that socket
}
// ... other route handling
}
}
现在,如我在上面的代码中所示,我正在尝试保存套接字以供以后使用。 set
仅将令牌用作将套接字对象保存在另一个对象中的键。以后,get(token)
可以与该令牌一起使用以使用套接字。我还扩展了express应用程序原型,以允许其他路由句柄使用wscManager
:
app.response._man = man;
现在,我的问题是这是正确的客户跟踪方法吗?在其他路由处理程序中,管理器的用法如下:
// in route handler
res._man.send(JSON.stringify({ status: <STATUS>, message: <MSG> }));
感谢您的时间和耐心。