2017-09-04 1 views
1

私はチャンネルを持っています。これは接続時にバックエンドで何かをします。バックエンドの仕事が完了したら、私は応答を返す必要があります。ここ は私のチャンネルです:エリクシール/フェニックス別のモジュールからブロードキャストされたエンドポイント

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 

私が最初にフロントエンドにboot:fetchtest:my%{total_reports: 541}を受信し、%{total_reports: 5}すると予想しました。しかし、私はboot:fetchからのデータしか受信せず、test:myではない。

Endpoint.broadcastLauncherモジュールは何も放送していません。それは期待される行動ですか?チャンネル別に別名でモジュールからブロードキャストできないのはなぜですか?

さらに、私はチャンネルに正確に同じ行を入れてテストしています。何らかの理由で私は他のモジュールでしかできません。この例では動作します:チャネルに参加する際

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 
関連する問題