【问题标题】:How to detect current topic?如何检测当前主题?
【发布时间】:2016-05-20 05:07:49
【问题描述】:

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

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

【问题讨论】:

    标签: phoenix-framework phoenix-channels


    【解决方案1】:

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

    所以假设房间主题的基数是"topic",以下是获取主题ID的方法:

    def handle_in("some_message", _params, socket) do
      "topic:" <> topic_id = socket.topic
      ...
    end
    

    【讨论】:

      【解决方案2】:

      join 有一个主题,因此您可以执行额外的验证来检查用户是否可以订阅该主题(检查他们的权限等)

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

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

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

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

      【讨论】:

      • 谢谢,我需要主题ID,因为发送消息时可能有主题相关的设置..另外,我认为套接字对象在通道范围内,但后来我发现它在用户范围,所以我想确保我做对了,套接字对象中的参数可以加密吗?
      • 实际上,用户可以加入领土频道,领土ID将用于读取关联的多边形,然后我可以检查是否在领土多边形内部或外部发送纬度,长消息..这就是为什么会的例子我需要主题 ID..
      • 在您需要的参数中发送区域ID。
      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 2023-04-03
      • 2017-12-01
      • 2020-11-09
      • 2014-05-22
      • 2015-12-31
      • 1970-01-01
      • 2011-04-24
      相关资源
      最近更新 更多