我有一个频道,当你连接它时,它会在后端做一些事情。一旦后端工作完成,我需要发回响应。 这是我的频道:
def join("boot", _, socket) do
Launcher.start()
{:ok, socket}
end
def handle_in("boot:fetch", params, socket) do
payload = %{total_reports: 5}
{:reply, {:ok, payload}, socket}
end
Launcher
模块是:
defmodule App.Launcher do
alias App.Endpoint
def start() do
Endpoint.broadcast! "boot", "test:my", %{total_reports: 541}
end
end
我希望首先在%{total_reports: 541}
上收到test:my
,然后在前端%{total_reports: 5}
上收到boot:fetch
。但我只接收来自boot:fetch
而非test:my
的数据。
Endpoint.broadcast
模块的 Launcher
不播放任何内容。这是预期的行为吗?为什么我不能通过频道别名模块进行广播?
此外,我已经测试了在通道中放置完全相同的线,它可以工作。出于某种原因,我不能只与其他模块一起做。这个例子有效:
def handle_in("boot:fetch", params, socket) do
payload = %{total_reports: 5}
Endpoint.broadcast! "boot", "test:my", %{total_reports: 541}
{:reply, {:ok, payload}, socket}
end
答案 0 :(得分:0)
我的错误是在加入频道时调用Endpoint.broadcast
,但由于连接尚未建立,因此无法广播。搬入处理中,一切正常。
def join("boot", _, socket) do
{:ok, socket}
end
def handle_in("boot:fetch", params, socket) do
Launcher.start()
payload = %{total_reports: 5}
{:reply, {:ok, payload}, socket}
end