2012-09-27 15 views
5

Jestem nowy w ZeroMQ (i programowaniu z gniazdami w ogóle), ale próbuję implementować (w Javie) model peer-to-peer w ZeroMQ. To, co chciałbym, to to, że kiedy węzeł przychodzi on-line, nadaje całej sieci komunikat "Jestem tutaj i możesz do mnie dotrzeć pod tym adresem: ...".zeromq broadcast do całej sieci

Myślę, że jeśli 2 lub więcej węzłów pojawi się w sieci, będą mogli znaleźć się bez konieczności przechodzenia przez znany punkt końcowy.

Czy ktoś ma pomysły na to, w jaki sposób mogę to osiągnąć? Czy to możliwe w przypadku ZeroMQ?

Odpowiedz

4

To, o co prosisz, nie może zostać wykonane przy pomocy zmq. Nie ma mechanizmu (bez znanego i zdefiniowanego punktu końcowego), który pozwala "wiedzieć", kiedy wydawca wchodzi do sieci, a jego wiadomości są gotowe do subskrybowania.

To dość trywialne, aby ustawić coś podobnego przy użyciu routera XPub and XSub (który wymaga znanego punktu końcowego). Można również utworzyć własny punkt końcowy, z którym wszyscy klienci łączą się za pomocą gniazda REQ/REP. Pozwoli ci to na posiadanie centralnego (w zasadzie directory service), z którego możesz następnie połączyć punkt z subskrybentem/opublikuj połączenia (co spowoduje, że twoje powielenie sieci będzie najniższe).

0

Możesz zrobić to w ten sposób z UDP:

  1. Wszystkie węzły słuchać stałej port UDP dla początkujących
  2. Gdy nowy węzeł podchodzi wysyła komunikat UDP do sieci (lub broadcast, jeśli jest dostępny) i wszyscy inni otrzymują go, wiedząc o jego obecności.
  3. Możesz teraz używać stałych punktów końcowych, np. zmq, aby przekazać komunikację dalej.

Jest przykładem C może chcesz spojrzeć na https://github.com/stanwu/udp-broadcast

  • Jeśli masz trzy maszyny z IP 192.168.1.10/11/12
  • Na 192.168.1.10 i 192.168.1.11 początku ./udpServer
  • na 192.168.1.12 uruchomić ./udpClient 192.168.1.0 I-AM-TU-192.168.1.12-PORT-7777
  • teraz 192.168.1.10/11 wie, że jest nowicjuszem na 192.168.1.12 uruchomiony niektóre słuchacz na 7777
0

Używam do tego UDP w istniejącym systemie w sieci LAN. To dobrze działa. Jedynym problemem, który musisz obejrzeć, jest to, że pakiety UDP nie są gwarantowane. W rzeczywistości się zgubią, więc musisz wziąć pod uwagę powtarzające się transmisje. Dostajesz również fragmentację pakietów, więc upewnij się, że wiadomości są małe, ale wystarczy wysłać wystarczającą ilość informacji, aby ustanowić połączenie dla ZMQ, lub TCP lub RabbitMQ lub cokolwiek innego. Inne potencjalne problemy to firewalle i VPN.