Różnica polega na tym, że gniazdo PUB
wysyła tę samą wiadomość do wszystkich abonentów, natomiast PUSH
robi round-robin pośród wszystkich podłączonych PULL
gniazd.
W tym przykładzie, jeśli wyślesz tylko jedną wiadomość z katalogu głównego, wszyscy subskrybenci otrzymają ją (z wyłączeniem wolnych subskrybentów itp.), Ale tylko 1 pracownika.
Układ publikacji/podrzędny służy do szerokiego rozpowszechniania wiadomości według tematów. Wzór push/pull jest tak naprawdę mechanizmem do pipeliningu. Wydaje się, że twój przykład push/pull próbuje przeprowadzić równoważenie obciążenia, co jest w porządku, ale req/rep może być lepiej dostosowany do tego z powodu innych problemów.
Wygląda jak „problemów” tu są opisane w tej samej części 0MQ kierować masz obraz z: push/pull ventilator example
Chciałbym również, aby znać różnicę pod względem utraconych wiadomości ... czyli co stałoby się, gdyby serwer PUB lub PUSH komunikat i klient [1] utracił połączenie i ponownie się połączył [2] klient jest podłączony przez cały czas, ale klient był zajęty wykonywaniem pracy i nie był w .recv() – Bhuvan
Gniazda 'SUB' i' PULL' mają wspólną cechę, którą konsumują z dostępnych wiadomości, nawet jeśli kod klienta nie wykonuje 'recv', więc w twoim przykładzie klient [2] otrzymywałby wiadomości w obu przypadkach, a klient [1] zaczynał dostawać nowe wiadomości po ponownym nawiązaniu połączenia. Co ważne, żaden typ gniazda nie jest "adresowany" do konkretnego klienta. – SteveLove
gdzie otrzymujesz te informacje .... hit i trial z zeroMQ lub znalazłeś fajny zasób? – Bhuvan