2017-04-17 39 views
-2

我们正在通过节点js项目中的socket.io实现聊天和其他通知。将用户套接字映射存储到全局变量中

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

为此,我们在app.js

global.user_sockets = {}; 

声明全局变量,当令牌authetication后新的连接创建分配用户ID,插座映射user_sockets阵列。

user_sockets[data.userId]=socket; 

对于使用全局变量有很多推测。一些用户表示,使用多个进程时会不太好。

对此有何解决方案?

+0

你看看Redis的发布/订阅吗? – Gntem

+0

我们也考虑过这个问题,但是添加另一个内存管理层而不是这个实现有用吗? – jit

+0

好吧,如果你的用户通过登录开始会话,你可以将socket.id和用户会话ID关联起来,然后可以使用传递的socket.io服务器对象作为参数,并调用发出等等。你也可以使用Redis发布/订阅并发布格式化的消息,并让订阅者函数处理所有内容,并在整个工作中将其保持为最小。许多人会同意使用全局变量不是最好的选择。您可能需要评估许多/其他选项以得出最适合您的应用程序的选项。 – Gntem

回答

0

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

相关问题