如何检测当前主题



我将在哪里存储主题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,那么它可以帮助回答你的问题,

相关内容

  • 没有找到相关文章

最新更新