我试图在socket io服务器端库的io.use方法中创建一些全局变量。目的是在整个请求生命周期中提供可用的变量(无论请求在websockets方面是什么意思)。我正在使用express framework和socket.io库。摘录如下: -
<context:property-placeholder location="${catalina.base}/conf/app.properties"/>
我想要的是像websockets的res.locals,即全局变量作用于每个单独的websocket连接。
我在上述代码段中遇到的问题是,这些变量保留了上次收到的请求的值,并且在多个请求中不可靠。
也是,如果我想在每条收到的消息上做基于jwt的身份验证,请使用jwt验证的最佳位置吗?
答案 0 :(得分:0)
全局变量的用例非常有限。这不是一个。 SocketIO允许您将所有处理程序放入套接字回调中。这很好,因为它允许你关闭你想要的变量:
io.on("connection", function(socket, next) {
var sid = socket.id;
var varName = socket.handshake.query.varName;
socket.on("message", function(){
console.log(varName);
});
//...
});
如果那不是一个选项,那么可能会创建自己的本地对象:
io.use(function(socket, next) {
socket.locals = {
sid: socket.id,
varName: socket.handshake.query.varName
};
next();
});
...但是,无论如何我都没有看到复制作为套接字一部分的属性的任何意义。