J'ai un canal, qui fait certaines choses en back-end lorsque vous vous y connectez. Je dois envoyer une réponse, une fois le travail de back-end terminé. Voici ma chaîne:Elixir/Phoenix Endpoint diffusé à partir d'un autre 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
Module
Et Launcher
est:
defmodule App.Launcher do
alias App.Endpoint
def start() do
Endpoint.broadcast! "boot", "test:my", %{total_reports: 541}
end
end
Je pensais d'abord recevoir %{total_reports: 541}
sur test:my
puis %{total_reports: 5}
sur boot:fetch
dans le front-end. Mais je ne reçois que des données de boot:fetch
et non de test:my
.
Endpoint.broadcast
à partir de Launcher
Le module ne diffuse rien. Est-ce un comportement attendu? Pourquoi ne puis-je pas diffuser à partir des modules aliasés par canal?
En outre, j'ai testé mettre exactement la même ligne dans le canal, et cela fonctionne. Pour une raison quelconque, je ne peux pas le faire uniquement avec d'autres modules. Cet exemple fonctionne:
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