私はPragProg "Programming Phoenix"の本に従っていますが、現在Phoenixのチャンネルについての章があります。Phoenix 1.2 - broadcast_from説明が必要
ある時点では、1つのトピックで単純なチャネルを設定し、クライアントとサーバー間のイン/アウトメッセージを処理する例があります。空想的なものはなく、広告されたようにすべてが機能しました。
その後、私はPhoenix.ChannelのAPIを調査し始め、 "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
です。そして、それは確かに結果でした。別のブラウザウィンドウを開いてチャンネルに接続するまでその時点で、 両方のウィンドウが「テスト」メッセージを受信し始めました。 2番目のウィンドウが別のデバイス(iPhoneなど)から開かれた場合も同様です。
これは正常な動作か、ドキュメントを誤解したり誤解したりしていますか?
ご協力いただきありがとうございます。