2016-08-16 8 views
1

私はマスター・プロセスは、このようにいくつかのスレーブ・プロセスとメッセージ交換に接続され、ネットワークアーキテクチャ作成する:すべてのスレーブが送信することができるはずZeroMQマスタースレーブ双方向通信

schema

をメッセージをマスターに送信します。マスタは、接続されたスレーブのすべてのサブセットにメッセージを送信できる必要があります。

  • マスターが1
  • マスターにメッセージを送信するスレーブ1 2とスレーブ3
  • マスターが
  • すべてのスレーブにメッセージを送信するスレーブにメッセージを送信するスレーブにメッセージを送信すなわちマスター

これらのメッセージには回答がある可能性がありますが、専用の方法がない場合は、より高いレベルで処理できますZeroMQでこれを行うf。

これは1つのポートだけを使用して動作するはずです。

プレーンソケットでは、ポートでマスターバインドを行い、接続を受け入れ、すべてのスレーブが受信データを処理し、単一の接続を使用して単一のスレーブに接続するスレッドを生成できます。

このアーキテクチャはメッセージベースの通信を使用するので、私はZeroMQがそれを実装する適切なツールだと思っていますが、ドキュメントを閲覧する方法はありません。

私はこれをPythonで記述しますが、問題は言語に依存しないようにする必要があります。

+1

いくつかの質問:すべてのスレーブは同じですか?奴隷は出入りしますか?複数のスレーブに送信する場合は、N個の特定のスレーブまたはN個のスレーブに送信しますか? – David

+0

@David奴隷は来ないし、システムは本当に安定しているはずです。奴隷が生まれたら、永遠に生きていなければなりません。私はN *特定の*の奴隷に送ることができるようにしたい。 「同じ」を定義する –

+0

「同じ」とは、同じバイナリ/スクリプトを複数回実行することを意味していましたが、これについてさらに考えても問題はありません。 – David

答えて

3

だけ私がディーラー/ルータを使用するために最善を考える一つのポートを使用して:

  • マスターはスレーブは「I」を送信開始するとスレーブがDealerソケット
  • だろうRouterソケット
  • だろうここでは、メッセージを、既知のスレーブのリストにアイデンティティ(最初のフレームを受信したもの)を格納すべきマスタに送信する。

次に、マスターは、アイデンティティと空のフレームをメッセージに付加してスレーブに送信します。 (ルータソケットで一度に1つのクライアントに送信することはできますが、メッセージとスレーブIDのリストを取得し、順番に送信する機能を書くことは簡単です)。

スレーブのアイデンティティは、ディーラーソケットでsetsockopt呼び出しを使用して設定するか、そうでない場合はZeroMQが自動的に割り当てます。

関連する問題