Wie kann ein Client mithilfe von Unix-Domain-Sockets mit einem anderen Client kommunizieren?

Wie kann ein Client mithilfe von Unix-Domain-Sockets mit einem anderen Client kommunizieren?

Mit Bash könnten wir mit Netcat etwa Folgendes erhalten:

nc -lk -U /my/fifo | while read line; do
   # line => {"client_id":123}
done;

Clients senden Daten wie diese:

echo '{"client_id":123,"data":"foo"}' | nc -U /my/fifo

und Clients warten auf Daten wie diese:

echo '{"client_id":123}' | nc -U /my/fifo | while read line; do

done;

meine Frage - Wie kann ich Daten von einem Client an einen anderen Client senden, ohne alle Clients einzubeziehen? Auf dem „Server“ müsste ich einen Verweis auf jeden Client speichern, damit ich, wenn ich eine Nachricht von einem Client erhalte, weiß, an wen ich die Nachricht weiterleiten muss? Wie kann ich einen Verweis auf die Clients speichern, die derzeit verbunden sind? Genau wie bei WebSockets möchte ich Kanäle erstellen, in denen jeder, der bei diesem Kanal registriert ist, die Nachricht erhält.

Antwort1

So ist die Sache, ich denke, ich kann den Kunden folgendermaßen antworten:

echo "this is the response" | nc -lk -U /my/fifo

aber der springende Punkt ist, wie reagiere ich anders, je nachdem, wer der Kunde ist? Ich meine, wie kann man etwas wirklich Nützliches erstellen, wenn es keine Logik basierend auf der Kundenanfrage usw. gibt?

Ich kann nur vermuten, dass es zwei Server geben sollte:

nc -lk -U /my/fifo1 | while read line; do

  # custom logic goes here

done > nc -lk -U /my/fifo2

So verbinden sich die Clients mit:

echo '{"client_id":123}' | nc -U /my/fifo1 

nc -U /my/fifo2 | while read line; do

done; 

das verrät, was ich darüber weiß, wie TCP- und Unix-Domain-Sockets mit Node.js usw. funktionieren, aber ich schätze, bei Bash müssen wir es so machen?

Ich denke auch, dass zur Vermeidung von Race Conditions die beiden obigen Befehle irgendwie in eine einzige Pipe eingefügt werden müssten.

verwandte Informationen