5

私はZeroMQ(および一般にソケットを使用したプログラミング)に不慣れですが、ZeroMQでピアツーピアモデルを(Javaで)実装しようとしています。私が欲しいのは、ノードがオンラインになると、ネットワーク全体に「私はここにいます。このアドレスで私に連絡できます:...」というメッセージをブロードキャストすることです。

ネットワーク上に2つ以上のノードが存在する場合、既知のエンドポイントを経由せずにお互いを見つけることができると思います。

誰かが私がこれを達成する方法について何かアイデアがありますか?これはZeroMQでも可能ですか?

4

3 に答える 3

4

あなたが求めていることはzmqではできません。パブリッシャーがオンラインになり、そのメッセージをサブスクライブする準備ができたときに「知る」ことができるメカニズムはありません(既知の定義されたエンドポイントがない場合)。

そうは言っても、 XPubおよびXSubルーター(既知のエンドポイントが必要)を使用してこの種の何かを設定することは非常に簡単です。すべてのクライアントがREQ/REPソケットを使用して接続する独自の「エンドポイント」を作成することもできます。これにより、中央(基本的にはディレクトリサービス)を使用して、ポイントツーポイントのサブスクライブ/公開接続に接続できます(これにより、ネットワークの重複が最小限に抑えられます)。

于 2012-10-05T13:21:02.067 に答える
0

あなたはUDPでこのようにそれをしたいかもしれません:

  1. すべてのノードは、新規参入者のために固定UDPポートをリッスンします
  2. 新しいノードが起動すると、UDPメッセージがネットワークに送信され(または利用可能な場合はブロードキャストされ)、他のすべてのノードがそのノードを取得して、その存在を認識します。
  3. これで、固定エンドポイント、つまりzmqを使用して通信を進めることができます。

https://github.com/stanwu/udp-broadcastを見たいと思うかもしれないCの例があり ます

  • IP192.168.1.10/11/12のマシンが3台ある場合
  • 192.168.1.10および192.168.1.11で./udpServerを起動します
  • 192.168.1.12で./udpClient192.168.1.0I-AM-HERE-192.168.1.12-PORT-7777を実行します
  • これで、192.168.1.10 / 11は、192.168.1.12に新参者がいて、7777でリスナーを実行していることを認識しています。
于 2013-09-29T18:59:19.587 に答える
0

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

于 2015-06-11T08:41:49.290 に答える