2017-09-04 64 views
1

我有一個頻道,當您連接到它時,它會在後端執行一些操作。一旦後端工作完成,我需要發回應答。 這裏是我的頻道:另一個模塊的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 

回答

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 
相關問題