Elixir/Phoenix端点从另一个模块广播



我有一个频道,当您连接到它时,它会在后端做一些事情。后端作业完成后,我需要回复。这是我的频道:

  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

相关内容

  • 没有找到相关文章

最新更新