【问题标题】:Phoenix: How to broadcast event to a different channel?Phoenix:如何将事件广播到不同的频道?
【发布时间】:2017-06-01 20:58:33
【问题描述】:

我正在制作一个匹配 2 个用户的应用。我正在尝试使用 socket.assigns 将人 B 的电子邮件存储到人 A 的套接字,反之亦然。

当人 A 向频道发出请求时,我可以使用 assign(socket, :matched_client_email, "personB@email.com") 毫无问题地更新套接字。但是,我不知道如何向B人的频道广播,以便我可以拨打assign(socket, :matched_client_email, "personA@email.com")

  def handle_in("find_match", %{ "app" => app }, socket) do
    ...

      push socket, "match_found", %{
        email: matched_user.email,
        first_name: first_name(matched_user.name),
        profile_image: matched_user.profile_image,
      }

      VideoChat.Endpoint.broadcast(
        "user_pool:#{matched_user.email}",
        "match_found",
        %{
          email: current_user.email,
          first_name: first_name(current_user.name),
          profile_image: current_user.profile_image,
        }
      )
    ...

    {:noreply, socket}
  end

  # never gets called
  def handle_out("match_found", %{ "email" => email }, socket) do
    Logger.info("HEREEEE #{email}")
    assign(socket, :matched_client_email, email)
    {:noreply, socket}
  end

如何从人 A 的频道向人 B 广播事件,以便调用 handle_in 方法?

【问题讨论】:

  • 模块里有没有给Phoenix.Channel.intercept/1打电话?
  • oooo 不知道,让我试试
  • 你知道handle_inhandle_out之间的区别吗?
  • 成功了!!!!谢谢

标签: sockets elixir phoenix-framework


【解决方案1】:

您需要致电Phoenix.Channel.intercept/1 并提供您希望调用handle_out 的事件列表。在您的情况下,您应该添加以下内容:

intercept ["match_found"]

【讨论】:

  • 你能补充解释吗?为什么这能解决问题?
猜你喜欢
  • 2016-11-27
  • 2018-12-24
  • 2019-05-16
  • 2016-01-31
  • 2022-07-18
  • 2021-07-09
  • 2020-10-27
  • 2016-07-24
相关资源
最近更新 更多