我正在尝试找出如何从控制器触发频道广播的方法。
示例
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
水冷却器通道
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”吗?
event =?
消息=?
答案 0 :(得分:1)
可以使用NotificationWeb.Endpoint
的{{3}}功能来广播消息。
topic
是您要在其中广播的房间(例如water_cooler:lobby
)
event
是您希望在客户端上收到的事件的名称
msg
是事件中的其他信息
考虑到您在前端部分有这样的东西:
channel.on("new_msg", payload => {
// process new message
})
然后event
等于new_msg
,并且msg
是数据,此事件中的payload
变量将包含