【问题标题】:How to trigger channel broadcast in the controller in PhoenixPhoenix如何在控制器中触发频道广播
【发布时间】:2018-12-24 14:36:19
【问题描述】:

我正试图弄清楚如何从控制器触发频道广播

示例

def create(conn, %{"message" => message_params}) do
with {:ok, %Message{} = message} <- Chat.create_message(message_params) do
  conn

  # TRIGGER CHANNEL BROADCAST "SHOUT" HERE

  |> put_status(:created)
  |> put_resp_header("location", message_path(conn, :show, message))
  |> render("show.json", message: message)
end end

water_cooler 通道

defmodule NotificationWeb.WaterCoolerChannel do
 use NotificationWeb, :channel
 def join("water_cooler:lobby", _payload, socket) do
  {:ok, socket}
 end
 def handle_in("shout", payload, socket) do
 broadcast socket, "shout", payload
  {:noreply, socket}
 end
end

我尝试使用NotificationWeb.broadcast(topic, event, msg),但不知道该放什么

topic = "water_cooler" ?

事件 = ?

消息 = ?

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    可以使用NotificationWeb.Endpointbroadcast 函数广播消息。

    • topic这里是你要广播的房间(例如water_cooler:lobby

    • event 是事件的名称,您希望在客户端收到

    • msg是事件中的附加信息

    考虑到你在前端部分有这样的东西:

    channel.on("new_msg", payload => {
      // process new message
    })
    

    那么event 等于new_msgmsg 是数据,该事件中的payload 变量将包含该数据

    【讨论】:

      猜你喜欢
      • 2016-11-27
      • 2016-03-01
      • 2016-11-20
      • 1970-01-01
      • 2017-06-01
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      相关资源
      最近更新 更多