Я следую по книге PragProg «Программирование Феникса», и сейчас я нахожусь в главах о каналах Феникса.Phoenix 1.2 - broadcast_from необходимых разъяснений
В какой-то момент есть пример настройки простого канала с одной темой и обработки сообщений ввода/вывода между клиентом и сервером. Никаких причудливых вещей, все работало как рекламируемое.
Затем я начал исследовать API Phoenix.Channel и нашел функцию «broadcast_from».
Проведя немного исследований, мне стало ясно, что использование «broadcast_from» (из канала) отправило бы сообщение всем подключенным клиентам, но тот, чье сообщение я обрабатывал.
Мой текущий код
defmodule Rumbl.VideoChannel do
use Rumbl.Web, :channel
def join("videos:" <> video_id, _params, socket) do
:timer.send_interval(5000, :ping)
{:ok, %{status: "successful join"}, assign(socket, :video_id, String.to_integer(video_id))}
end
def handle_info(:ping, socket) do
count = socket.assigns[:count] || 1
#push socket, "ping", %{count: count}
broadcast_from! socket, "test", %{id: 1, status: :critical}
{:noreply, assign(socket, :count, count + 1)}
end
end
Я ожидал, что при подключении клиента, клиент не получит «тест» сообщения. И это был результат. Пока я не открыл другое окно браузера и не подключился к каналу. В этот момент оба окна начали получать «тестовые» сообщения. Это также произошло, если второе окно было открыто с другого устройства (например, iPhone).
Это обычное поведение или это неправильное использование/недопонимание документации?
Заранее благодарим за поддержку.