ZMQ PULL Source

Empfängt Daten von einem ZMQ-PUSH-Sink mit garantierter Zustellung an genau einen Abnehmer — die Pipeline-Alternative zu Publish/Subscribe.

1. Beschreibung des Blocks

Der ZMQ PULL Source-Block verbindet sich mit einem ZeroMQ-PUSH-Endpoint und empfängt darüber Daten — als Stream (ZMQ PULL Source) oder als einzelne Nachrichten über einen Message-Port (ZMQ PULL Message Source). Push/Pull unterscheidet sich von Publish/Subscribe dadurch, dass jede gesendete Nachricht garantiert an einen Abnehmer zugestellt wird (bei mehreren Pull-Clients per Round-Robin), statt bei fehlendem Zuhörer verloren zu gehen. Das Gegenstück auf Senderseite ist der ZMQ PUSH Message Sink.

ZMQ PULL Source

ZMQ PULL Message Source

ZMQ PUSH Message Sink

2. Technischer Einsatz

Push/Pull eignet sich für Pipelines, bei denen jede Dateneinheit genau einmal verarbeitet werden soll — z. B. um Ereignisse zuverlässig an einen einzelnen externen Worker-Prozess weiterzureichen, ohne dass bei kurzzeitig fehlender Verbindung Daten verlorengehen (begrenzt durch die hwm-Pufferung von ZeroMQ). Wird dagegen Broadcast an mehrere, gleichberechtigte Beobachter benötigt, ist ZMQ PUB Sink / ZMQ SUB Source das passende Muster.

3. Parameter und Dimensionierung

Parameter Typ/Einheit Bedeutung Dimensionierungshinweis
Address String ZeroMQ-Endpoint des PUSH-Sinks, z. B. tcp://127.0.0.1:5557 muss exakt der Adresse entsprechen, auf der der PUSH-Sink bindet
Timeout (msec) Millisekunden wie lange auf eingehende Daten gewartet wird, bevor der Block einen leeren Zyklus abschließt Standard 100 ms; beeinflusst primär die Reaktionszeit beim Beenden des Flowgraphs
Connection Enum (Bind/Connect) ob der Block sich verbindet (Connect) oder selbst bindet (Bind) PULL-Blöcke verbinden sich per Default — der PUSH-Sink bindet als feste, bekannte Adresse
Pass Tags (nur Stream-Variante) Bool ob übertragene Stream-Tags ausgewertet werden „Yes" nur, wenn die Gegenseite ebenfalls GNU Radio ist
hwm (High Watermark) Integer maximale Anzahl gepufferter Nachrichten beim PUSH-Sink, bevor ZeroMQ blockiert oder verwirft -1 = ZeroMQ-Standardwert; bestimmt, wie viel Puffer für kurzzeitig getrennte Verbindungen zur Verfügung steht

4. Ein- und Ausgänge

Ein-/Ausgang Typ
Ausgang (ZMQ PULL Source) beliebiger Stream-Typ (Complex, Float, Int, Short, Byte)
Ausgang (ZMQ PULL Message Source) Message-Port (PMT)
Eingang (ZMQ PUSH Message Sink) Message-Port (PMT)

Der ZMQ PUSH Message Sink hat entsprechend keinen eigenen Ausgang (Senke), während beide PULL-Varianten keinen Eingang besitzen (Quelle).

5. Weitere wichtige Aspekte

Garantierte Zustellung statt Broadcast: Verbindet sich der PULL-Client nach dem Senden einer Nachricht, geht diese — anders als bei ZMQ SUB Source — nicht zwangsläufig verloren, solange ZeroMQ sie noch puffert (begrenzt durch hwm).

1-zu-1 statt 1-zu-n: Jede Nachricht geht an genau einen Abnehmer. Sind mehrere PULL-Clients verbunden, verteilt ZeroMQ die Nachrichten per Round-Robin auf sie — für Lastverteilung nützlich, aber kein Ersatz für Broadcast an mehrere gleichberechtigte Beobachter.

Bind vs. Connect: Der PUSH-Sink bindet standardmäßig den Port, die PULL-Quelle(n) verbinden sich als Abnehmer — dieselbe Server/Client-Rollenverteilung wie bei PUB/SUB, nur mit garantierter statt verlorener Zustellung.