【问题标题】:Storing user sockets mapping into global variable将用户套接字映射存储到全局变量中
【发布时间】:2017-04-17 14:58:13
【问题描述】:

我们正在 node js 项目中通过 socket.io 实现聊天和其他通知。

我们需要保留用户 -> 套接字映射。

为此,我们在 app.js 中声明了全局变量

global.user_sockets = {};

并在令牌认证后创建新连接时在 user_sockets 数组中分配用户 ID、套接字映射。

user_sockets[data.userId]=socket;

对于使用全局变量有很多猜测。有用户说多进程使用不好。

对此还有其他解决方案吗?

【问题讨论】:

  • 你看过 Redis 发布/订阅吗?
  • 我们也考虑过这一点,但是添加另一个内存管理层而不是这个实现有用吗?
  • 好吧,如果您的用户通过登录启动会话,您只需将 socket.id 与用户会话 id 相关联,然后可以将 socket.io 服务器对象作为参数传递并调用 emit等等。您还可以使用 Redis 发布/订阅,只发布格式化的消息,让订阅者函数处理所有事情,并将整个工作保持在一个脚本中。许多人会同意使用全局变量不是最佳选择。您可能需要评估许多/其他选项以得出最适合您的应用程序的选项。

标签: node.js socket.io


【解决方案1】:

您可以将user_sockets 作为参数传递给您使用的函数,而不是全局变量。但这会将参数数量增加 1,我认为这不是问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    相关资源
    最近更新 更多