2015-12-14 5 views
7

WebSocketを使って作業する場合、Phoenixチャンネルを新しいRails ActionCableと比較しようとしています。Phoenix Channelからのブロードキャストは、他のノードのクライアントにどのように影響しますか?

一部のコンテキストでは、ActionCableはすべてのクライアントにメッセージをブロードキャストするときにRedisを使用してPubSubを処理します。シナリオの例:別のノード上の3つのレールプロセスのうちの1つが、すべてのWebサーバーに接続されたクライアントにブロードキャストできるようになります。これはRedisを押すことによって行われ、Redisはすべてのレールサーバーにパブリッシュされ、接続されたすべてのクライアントにプッシュされます。

私は最近、2 million websocket connections achieved by Phoenixウェブソケット接続について読んでいます。

はまた、この宝石を見つけた: フェニックス1.0リリースノートこのに関するチャンネルを言及:

でもマシンのクラスタ上で、あなたのメッセージは自動的に

でどのように ノード間で放送されていますPhoenixはノード間でクライアントにブロードキャストできますか?それはボンネットの下でメールボックスやその他のプロセス間通信を使用していますか?

これは、postの質問2)と同様です。

ありがとうございます!

答えて

13

PhoenixのPubSubレイヤーは、標準ライブラリのみで実装されています。 Erlang VMの並行性モデルは、そのままの状態で配布されます。だからメールボックス/メッセージングモデルはちょうどあなたがメッセージをローカルに送信するsend(some_local_pid, :a_message)または全体的にsend(some_pid_on_another_machine, :a_message)です。これは、ElixirとErlangの素晴らしい点の1つです。これは、PhoenixがRedisのような依存関係を守ることを可能にします。あなたはフェニックスのPubSubのシステムがその実装でこれらの機能を活用してどのように好奇心旺盛であれば、このブログ記事を参照してください。

http://www.zohaib.me/guts-of-phoenix-channels/?utm_campaign=elixir_radar_28&utm_medium=email&utm_source=RD+Station

tldr。ローカルのETSテーブルを使用して、ノードにローカルなプロセスのPubSubサブスクリプションを保持し、各PubSub.Localサーバがメンバーである単一の:pg2グループを使用してノード間でブロードキャストします。 PubSub.Localサーバは、ブロードキャストを受信すると、ローカルのETSサブスクリプションを検索して、ローカルにすべてのサブスクライバにメッセージを転送します。実際のIPCの詳細とノード< - >ノード通信は、完全にランタイムによって処理されます。

+0

ありがとうございます!これはすごくいいですね。私は、ウェブサーバーがピアブロードキャストを可能にするために互いにどのように知っているのだろうかと私は興味がありますが、自分の研究のためにそれを保存します。このモデルは、ワーカー・キューにも適用可能なようです。真のフェニックスのバックグラウンドワーカーフレームワークは、sidekiqや[exq](https://github.com/akira/exq)のようなredisを使用しませんが、このアプローチを使用します。 – dimroc

+1

これは、次のリーダーが通過するためのものです。各ノード(この場合はWebサーバー)は、分散システムとしてアプリケーションをデプロイしたため、他のノードとの通信方法を認識しています。詳細については、以下のリンクをクリックしてください。 http://benjamintan.io/blog/2014/05/25/connecting-elixir-nodes-on-the-same-lan/ – dimroc

関連する問題