另一个模块的Elixir/Phoenix Endpoint广播
问题描述:
我有一个频道,当您连接到它时,它会在后端执行一些操作。一旦后端工作完成,我需要发回应答。 这里是我的频道:另一个模块的Elixir/Phoenix Endpoint广播
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
我预计在test:my
首先接收%{total_reports: 541}
,然后在前端boot:fetch
%{total_reports: 5}
。但我只收到来自boot:fetch
的数据而不是test:my
。
Endpoint.broadcast
from 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
答
我的错误是在调用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