我将在哪里存储主题ID?
至于socket,我可以使用:
def join("topic:" <> topic_id, _params, socket) do
...
socket= assign(socket, :topic_id, topic_id)
{:ok, socket}
end
那是在socket范围内,但是我的用户可以同时加入多个主题,这意味着每次加入新主题时上面的代码都会覆盖topic_id,这是真的吗?
如果我想知道handle_in
中哪个主题ID有效,该怎么办?
例如:
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
还有其他办法吗?或者这就是它的完成方式?
答案 0 :(得分:3)
用户可以加入多个主题。您可以通过topic
中的socket
参数访问当前handle_in
。
因此,假设房间主题的基础为"topic"
,以下是您获取主题ID的方法:
def handle_in("some_message", _params, socket) do
"topic:" <> topic_id = socket.topic
...
end
答案 1 :(得分:0)
join
有一个主题,以便您可以执行其他验证以检查用户是否可以订阅该主题(检查其权限等)
您是正确的,在订阅主题后,通道将通过套接字进行多路复用。
如果您希望传递特定邮件的其他信息,则可以使用params:
def handle_in("new_message", %{"topic_id" => topic_id}, socket) do
...
end
如果您能解释为什么需要topic_id,那么它可以帮助您解决问题,