HTTPリクエストからChannelへメッセージを送る
GETやPOSTなどのHTTPリクエストを受け取り、その処理の中でChannelにデータを送信したい場合、以下のように書くことでメッセージを送信できる。
HelloPhoenix.Endpoint.broadcast_from! self(), "rooms:lobby", "new_msg", %{uid: uid, body: body}
http://hexdocs.pm/phoenix/Phoenix.Channel.html の "Broadcasting to an external topic" の箇所に書いてあったのを ここ に合わせて少し変更した。そこの例では channel 側のコードとして書かれているけど、controller 側のコードの中でも使えた(まあ、*.Endpoint モジュールの関数なので当たり前?)。
ちなみに、これで何をしたかったのかというと、fluentd でログを転送して、それをブラウザでリアルタイムで見れるようにしたかった。
こんな感じ。
+---------+ +---------+ Log -> | fluentd | | Browser | +---------+ +---------+ | A | | +-- HTTP(POST) +-- Websocket | | V | +-----------------------+ | Phoenix | +-----------------------+