2013-07-23 31 views

Odpowiedz

56

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

+4

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

+1

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

+1

gdzie otrzymujesz te informacje .... hit i trial z zeroMQ lub znalazłeś fajny zasób? – Bhuvan