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.



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.