Gibt es eine Möglichkeit zur Umsetzung derVeröffentlichungs-/Abonnementmustervon der Kommandozeile aus, ohne einen Serverprozess zu verwenden? Dies muss nur auf einer Maschine funktionieren.
Indem ich keinen Serverprozess habe, möchte ich vor allem vermeiden, dass ich eine Maschine für die Verwendung dieser Tools konfigurieren muss. Außerdem möchte ich mich nicht mit der Möglichkeit auseinandersetzen müssen, dass mein Serverprozess abstürzt.|
Das könnte etwa so aussehen:
# client 1
subscribe name | while read line; do echo $line; done
# client 2
subscribe name | while read line; do echo $line; done
# server
echo message | publish name
Verwandte Links
- POSIX-IPCbietet eine serverloseNachrichtenwarteschlangeund es gibt Kommandozeilen-Clients dafür(1) (2) (3). Dies könnte zusammen mit einer Art Statusspeicher verwendet werden, um das oben genannte zu implementieren.
- ZMQbietet eineProtokoll für Pub/Sub-KommunikationEs gibt Kommandozeilentools analog zukeinezum BenutzenZMQ, wie zum BeispielAbonnieren. Diese könnten verwendet werden, um ein minimales Pub/Sub-Muster für die Befehlszeile einzurichtenmit einem Server.
- Linux bietet einen weiteren IPC-Mechanismus namensbenannte Pipes (vgl. mkfifo). Ich weiß nicht, was das beabsichtigte Verhalten bei mehreren Verbrauchern ist. Aber einige anfängliche Experimente deuten darauf hin, dass jede Nachricht nurvon einem der Verbraucher erhalten
Antwort1
Alle Abonnenten müssen über neue Daten benachrichtigt werden, ohne dass andere Abonnenten davon betroffen sind, und der Server darf nicht nachverfolgen müssen, welche Daten die Abonnenten erhalten haben. Dies macht FIFO für diesen Zweck nutzlos. Ironischerweise tut eine normale Datei genau das, was Sie wollen, da Dateideskriptoren bei normalen Dateien Dateiänderungen nachverfolgen. Sie können dies mit Überschreiben kombinieren, wodurch sichergestellt wird, dass alle Änderungen veröffentlicht werden, bevor ein neues Überschreiben erfolgt, was bedeutet, dass Sie nur eine Nachricht speichern.
touch pubsub
tail -f pubsub | while read line; do echo $line; done
tail -f pubsub | while read line; do echo $line; done
echo "message" | cat > pubsub
Sie erhalten im Standardfehler die Meldung „Datei abgeschnitten“, was das erwartete Verhalten ist. Wenn Sie dies jedoch nicht sehen möchten, fügen Sie 2> /dev/null hinzu.
tail macht eigentlich alles, was read und echo machen, aber es ist so geschrieben, weil ich annehme, dass Sie es in ein Skript integrieren möchten.