我将在哪里存储主题id?
至于插座,我可以使用:
def join("topic:" <> topic_id, _params, socket) do
...
socket= assign(socket, :topic_id, topic_id)
{:ok, socket}
end
这是在套接字范围内,但我的用户可以同时加入多个主题,这意味着每次加入新主题时,上面的代码都会覆盖topic_id,这是真的吗?
如果我想知道哪个主题id在handle_in
中是活动的,该怎么办?
例如:
def handle_in("new_message", params, socket) do
# what is the active topic id here?
end
我想到了这个:
def handle_in("new_message:" <> topic_id, params, socket) do
# now, I know that topic_id is the active topic
end
有别的办法吗?或者就是这样做的?
用户可以加入多个主题。您可以从handle_in
中的socket
参数访问当前的topic
。
因此,假设房间主题的基础是"topic"
,以下是如何获得主题id:
def handle_in("some_message", _params, socket) do
"topic:" <> topic_id = socket.topic
...
end
join
有一个主题,您可以执行额外的验证来检查用户是否可以订阅该主题(检查他们的权限等)
您是对的,在订阅了主题之后,通道会通过套接字进行多路复用。
如果您希望传递特定消息的附加信息,params是一个常见的放置位置:
def handle_in("new_message", %{"topic_id" => topic_id}, socket) do
...
end
如果你能解释为什么你需要topic_id,那么它可以帮助回答你的问题,