套接字IO套接字属性未保存

时间:2019-01-03 19:56:35

标签: node.js socket.io

我将NodeJS与SocketIO一起使用。 当我在异步函数中分配属性时,像这样

socket.on(channel, (data) => {socket.username = "username" });

,然后在其他地方使用此属性。 (在另一个socket.on回调函数中),我得到以下消息:socket.username未定义。

我还分别创建了一个var用户名,但结果是相同的。分配的值在外部功能中不可见。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

每个套接字连接都有其自己的上下文。

如果要在上下文之间共享数据-必须将其保留在可以全局访问的位置。

有很多方法可以实现它。


其中简单如下:

1)创建具有以下内容的模块GlobalContext

module.exports = new Map();

2)并像这样传递您的上下文变量:

const context = require('./GlobalContext');

socket.on(channel, (data) => {
  context.set('username', "someone"); 
});

3)从外部访问它:

const context = require('./GlobalContext');

const username = context.get('username');


P.S。请记住,在可以并行处理许多套接字io实例的容器化环境中,必须以不同的方式进行操作。

我的示例适用于您取消集群1个socket.io应用程序实例的情况。