我可以在连接建立后向“主套接字”添加分配吗?

Can I add assigns to the “main socket” after the connection is already established?

正如 this post 所解释的那样,当客户端首次连接到服务器时,将创建一个“main socket/process”并保存其分配。稍后,当客户端加入特定的 channels/topics 时,每个频道的 socket/process 复制这些分配并可以随意添加。

我现在有一个用例,在用户加入他们自己的个人频道 (i.e. user:#{user_id}) 后,我从数据库中检索了一些关于该用户的信息,这些信息随后应该可供该用户的所有频道全局使用加入。然而,我一直没能找到一种方法将这些信息放入 socket.assigns 以便它们随处可用。如果我尝试分配它们,它们将只在这个特定 user:#{user_id} 频道的 socket.assigns 中可用。

有办法吗?我是否应该尝试在用户首次连接时一次性获取所有这些信息,而不是在他们加入个人用户频道时?

不同的通道意味着不同的插座。

最简单的解决方案是保持永久状态(AgentETSDETSmnesia、...),持有地图user_id => user_info 并在需要此信息时查询此状态。