Elixir/Phoenix 来自另一个模块的端点广播
Elixir/Phoenix Endpoint broadcast from another module
我有一个频道,当您连接到它时,它会在后端执行一些操作。后端作业完成后,我需要发回响应。
这是我的频道:
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
.
来自 Launcher
模块的 Endpoint.broadcast
没有广播任何内容。这是预期的行为吗?为什么我不能从频道别名的模块广播?
此外,我已经测试过将完全相同的线路放入频道,并且可以正常工作。出于某种原因,我不能只用其他模块来做。这个例子有效:
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
我有一个频道,当您连接到它时,它会在后端执行一些操作。后端作业完成后,我需要发回响应。 这是我的频道:
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
.
Launcher
模块的 Endpoint.broadcast
没有广播任何内容。这是预期的行为吗?为什么我不能从频道别名的模块广播?
此外,我已经测试过将完全相同的线路放入频道,并且可以正常工作。出于某种原因,我不能只用其他模块来做。这个例子有效:
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