另一个模块的Elixir/Phoenix Endpoint广播

另一个模块的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