【问题标题】:Socket IO socket properties are not savedSocket IO 套接字属性未保存
【发布时间】:2019-05-30 10:28:14
【问题描述】:

我正在使用带有 SocketIO 的 NodeJS。 当我在异步函数中分配属性时,像这样

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

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

我也单独创建了一个 var 用户名,但是结果是一样的。分配的值在外部函数中不可见。

感谢您的帮助。

【问题讨论】:

  • 您需要发布更多上下文。

标签: node.js socket.io


【解决方案1】:

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

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

有很多方法可以实现它。


其中简单的如下:

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');


附:请记住,在可以并行工作许多套接字 io 实例的容器化环境中,它必须以不同的方式完成。

我的示例是针对您已取消集群 1 个 socket.io 应用程序实例的情况。

【讨论】:

    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 2022-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多