These two function calls: MyApp.Endpoint.broadcast
, and Phoenix.PubSub.broadcast
, seem to do the same thing(except the endpoint is wrapped in a Broadcast struct). Are they exactly the same? Does one do something the other doesn’t? Which should I default to using?
For me the most important distinction is MyApp.Endpoint.broadcast
couples the invocation to *_web
part of the app, and Phoenix.PubSub.broadcast
doesn’t.
3 Likes
MyAppWeb.Endpoint.broadcast("delivery_slots:1", "testing", %{test: "data"})
is same as
Phoenix.PubSub.broadcast(MyApp.PubSub, "delivery_slots:1", %Phoenix.Socket.Broadcast{
topic: "delivery_slots:1",
event: "testing",
payload: %{test: "data"}
})
which can be read, for example, in LiveView as:
@impl true
def handle_info(
%Phoenix.Socket.Broadcast{
event: "testing",
payload: payload,
topic: _topic
} = msg,
socket
) do
IO.inspect(msg, label: "TESTING BROADCST ON EVEN TTESTING")
{:noreply, socket}
end
8 Likes