在Node.js中跟踪WS客户端

时间:2019-04-23 13:47:41

标签: node.js sockets express ws

我正在通过快捷插件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> }));

感谢您的时间和耐心。

0 个答案:

没有答案