Volt は、ある Volt クラスター (同一のデータベースに接続しているインスタンス) のすべての Volt インスタンス (server/console/runner) 間の pub/sub インターフェースを提供するメッセージバスを持っています。Volt は PeerToPeer のメッセージバスを持っていますが、他のメッセージバスを作成したり、利用することができます。
メッセージバスは、インスタンス間でモデルの更新をプッシュするために Volt が内部的に使用しています。更新は、Volt インスタンスに接続しているすべてのブラウザーに送信されます。これによって Volt は、ライブアップデートのプッシュ機能を維持したまま、スケールアウトすることを容易にしています。
デフォルトの peer to peer バスはデータベースを利用して、インスタンスが構成するソケットサーバーの IP とポーとのリストを同期します。(※構成の詳細は、生成された config/app.rb
のコードを参照してください) サーバーがネットワーク越しに疎通可能な限り、すべては「just work™」するはずです。(※多くのデプロイ環境で、プライベートクラウド内でサーバーは相互に通信できます) もしサーバーの限られたポートしか開かれていない場合は、config/app.rb
で利用するポートを指定することができます。
メッセージバスはアプリケーションのコードで使用することもできます。メッセージバスは subscribe
と publish
のメソッドを提供します。
TODO: メッセージバスについての記載を追加する
lib/volt/message_bus/base_message_bus.rb
に BaseMessageBus
クラスを実装することで、独自のメッセージバスを用意することができます。それを config.message_bus.bus_name = 'name_of_class'
として設定します。name_of_class
はクラス名をアンダースコア表記にしたものです。独自バスの実装に関する詳細は base_message_bus.rb
を参照してください。