2012-09-27 11 views
5

私はZeroMQを新しく(一般的にはソケットでプログラミングしています)、ZeroMQにピアツーピアモデルを実装しようとしています。私が望むのは、ノードがオンラインになったときに、ネットワーク全体に「私はここにおり、このアドレスで私に連絡できます:」というメッセージです。zeromqさんがネットワーク全体にブロードキャストしました

2つ以上のノードがネットワーク上に表示されている場合、既知のエンドポイントを経由することなく互いを見つけることができると私は考えています。

私はこれを達成する方法について誰もが考えていますか?これはZeroMQでも可能ですか?

答えて

4

あなたが求めているのは、zmqで行うことができません。サイト運営者がオンラインになり、メッセージの購読準備が整ったときに「知る」ことができる仕組み(既知のエンドポイントなし)はありません。

これは、既知のエンドポイントを必要とするXPub and XSubルータを使用して、この並べ替えの何かを設定することは非常に自明です。すべてのクライアントがREQ/REPソケットを使用して接続する独自の「エンドポイント」を作成することもできます。これにより、ポイントツーポイントサブスクリプション/パブリッシュ接続(ネットワークの重複を最小限に抑えます)を接続できる中央(本質的にdirectory service)を持つことができます。

0

あなたはUDPでこのようにそれをやってみたいことがあります。

  1. すべてのノードは、新規参入者のための固定のUDPポートを聞く
  2. 新しいノードがネットワークにUDPメッセージを送るアップします(または他のすべての人がその存在を知るようにします。
  3. 固定エンドポイント、つまりzmqを使用して通信を前方に進めることができるようになりました。

Cの例では、192.168.1.10と192.168.1.11スタートでIP 192.168.1.10/11/12

  • と3台のマシンを持っている場合は、https://github.com/stanwu/udp-broadcast

    • を見てみたいことがありあり./udpServer
    • 192.168.1.12上で実行./udpClient 192.168.1.0 I-AM-HERE-192.168.1.12-PORT-7777今192.168.1.10/11が192.168.1.12のいくつかを実行しているの新人がある知っている
    • リスナーオン7777
  • 0

    私はこれをLAN上の既存のシステムで使用しています。それはうまくいく。監視する必要がある唯一の問題は、UDPパケットが配信保証されていないことです。彼らは実際に迷子になるので、繰り返し放送を考慮する必要があります。パケットの断片化もありますので、メッセージは小さいが、ZMQやTCPまたはRabbitMQなどの接続に必要な情報を送信するだけで十分です。その他の潜在的な問題は、ファイアウォールとVPNです。

    関連する問題