1

我将在哪里存储主题 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

还有另一种方法可以做到这一点吗?或者这就是它的完成方式?

4

2 回答 2

6

用户可以加入多个主题。topic您可以从 中的socket参数访问当前handle_in

因此,假设房间主题的基数是"topic",您可以通过以下方式获取主题 ID:

def handle_in("some_message", _params, socket) do
  "topic:" <> topic_id = socket.topic
  ...
end
于 2016-05-19T21:07:49.417 回答
0

join一个主题,以便您可以执行其他验证以检查用户是否可以订阅该主题(检查他们的权限等)

你是对的,在订阅主题后,通道在套接字上多路复用。

如果您希望传递特定消息的附加信息,参数是放置它们的常见位置:

def handle_in("new_message", %{"topic_id" => topic_id}, socket) do
  ...
end

如果你能解释为什么你需要 topic_id 那么它可以帮助回答你的问题,

于 2016-05-19T14:43:15.337 回答