Como um cliente pode conversar com outro cliente usando soquetes de domínio unix?

Como um cliente pode conversar com outro cliente usando soquetes de domínio unix?

Usando o bash, poderíamos ter algo assim com o netcat:

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

os clientes enviam dados como este:

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

e os clientes esperam por dados como estes:

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

done;

minha pergunta - como posso enviar dados de um cliente para outro cliente, sem envolver todos os clientes? No "servidor", eu precisaria armazenar uma referência para cada cliente, para que quando eu receber uma mensagem de um cliente eu saiba para quem encaminhar a mensagem? Como posso armazenar uma referência aos clientes que estão conectados no momento? Assim como os websockets, quero criar canais, onde qualquer pessoa cadastrada naquele canal receberá a mensagem.

Responder1

Então é o seguinte: acho que posso responder aos clientes com:

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

mas a questão toda é como responder de maneira diferente dependendo de quem é o cliente? Quero dizer, como você pode criar algo muito útil se não houver lógica baseada na solicitação do cliente, etc.?

Meu único palpite é ter dois servidores:

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

  # custom logic goes here

done > nc -lk -U /my/fifo2

então os clientes se conectam com:

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

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

done; 

isso revela o que eu sei sobre como os soquetes de domínio tcp e unix funcionam com Node.js etc, mas acho que com o bash temos que fazer dessa maneira?

Também acho que, para evitar condições de corrida, talvez seja necessário colocar os dois comandos acima em um único canal de alguma forma.

informação relacionada