我可以在连接建立后向“主套接字”添加分配吗?
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
中可用。
有办法吗?我是否应该尝试在用户首次连接时一次性获取所有这些信息,而不是在他们加入个人用户频道时?
不同的通道意味着不同的插座。
最简单的解决方案是保持永久状态(Agent
、ETS
、DETS
、mnesia
、...),持有地图user_id => user_info
并在需要此信息时查询此状态。
正如 this post 所解释的那样,当客户端首次连接到服务器时,将创建一个“main socket/process”并保存其分配。稍后,当客户端加入特定的 channels/topics 时,每个频道的 socket/process 复制这些分配并可以随意添加。
我现在有一个用例,在用户加入他们自己的个人频道 (i.e. user:#{user_id})
后,我从数据库中检索了一些关于该用户的信息,这些信息随后应该可供该用户的所有频道全局使用加入。然而,我一直没能找到一种方法将这些信息放入 socket.assigns
以便它们随处可用。如果我尝试分配它们,它们将只在这个特定 user:#{user_id}
频道的 socket.assigns
中可用。
有办法吗?我是否应该尝试在用户首次连接时一次性获取所有这些信息,而不是在他们加入个人用户频道时?
不同的通道意味着不同的插座。
最简单的解决方案是保持永久状态(Agent
、ETS
、DETS
、mnesia
、...),持有地图user_id => user_info
并在需要此信息时查询此状态。