如何检测当前主题?
How to detect current topic?
我应该在哪里存储主题 ID?
关于socket,我可以用:
def join("topic:" <> topic_id, _params, socket) do
...
socket= assign(socket, :topic_id, topic_id)
{:ok, socket}
end
那是在套接字范围内,但我的用户可以同时加入多个主题,这意味着每次加入新主题时,上面的代码都会覆盖 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
还有其他方法吗?或者这是怎么做的?
join
有一个主题,因此您可以执行额外的验证来检查用户是否可以订阅该主题(检查他们的权限等)
你是对的,订阅主题后,通道在套接字上进行多路复用。
如果您希望传递特定消息的附加信息,参数是放置它们的常见位置:
def handle_in("new_message", %{"topic_id" => topic_id}, socket) do
...
end
如果你能解释为什么你需要 topic_id 那么它可以帮助回答你的问题,
用户可以加入多个主题。您可以从 handle_in
.
中的 socket
参数访问当前的 topic
所以假设聊天室主题的基础是 "topic"
,下面是获取主题 ID 的方法:
def handle_in("some_message", _params, socket) do
"topic:" <> topic_id = socket.topic
...
end
我应该在哪里存储主题 ID?
关于socket,我可以用:
def join("topic:" <> topic_id, _params, socket) do
...
socket= assign(socket, :topic_id, topic_id)
{:ok, socket}
end
那是在套接字范围内,但我的用户可以同时加入多个主题,这意味着每次加入新主题时,上面的代码都会覆盖 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
还有其他方法吗?或者这是怎么做的?
join
有一个主题,因此您可以执行额外的验证来检查用户是否可以订阅该主题(检查他们的权限等)
你是对的,订阅主题后,通道在套接字上进行多路复用。
如果您希望传递特定消息的附加信息,参数是放置它们的常见位置:
def handle_in("new_message", %{"topic_id" => topic_id}, socket) do
...
end
如果你能解释为什么你需要 topic_id 那么它可以帮助回答你的问题,
用户可以加入多个主题。您可以从 handle_in
.
socket
参数访问当前的 topic
所以假设聊天室主题的基础是 "topic"
,下面是获取主题 ID 的方法:
def handle_in("some_message", _params, socket) do
"topic:" <> topic_id = socket.topic
...
end