¿Cómo puede un cliente hablar con otro cliente utilizando sockets de dominio Unix?

¿Cómo puede un cliente hablar con otro cliente utilizando sockets de dominio Unix?

Usando bash podríamos tener algo como esto con netcat:

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

los clientes envían datos como este:

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

y los clientes esperan datos como este:

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

done;

mi pregunta - ¿Cómo puedo enviar datos de un cliente a otro sin involucrar a todos los clientes? En el "servidor", necesitaría almacenar una referencia a cada cliente, de modo que cuando reciba un mensaje de un cliente, sepa a quién reenviar el mensaje. ¿Cómo puedo almacenar una referencia a los clientes que están conectados actualmente? Al igual que websockets, quiero crear canales donde cualquier persona registrada en ese canal recibirá el mensaje.

Respuesta1

Así que aquí está la cuestión, supongo que puedo responder a los clientes con:

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

pero el punto es ¿cómo respondo de manera diferente dependiendo de quién sea el cliente? Quiero decir, ¿cómo se puede crear algo muy útil si no existe una lógica basada en la solicitud del cliente, etc.?

Mi única suposición es tener dos servidores:

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

  # custom logic goes here

done > nc -lk -U /my/fifo2

entonces los clientes se conectan con:

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

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

done; 

Esto traiciona lo que sé sobre cómo funcionan los sockets de dominio TCP y Unix con Node.js, etc., pero supongo que con bash tenemos que hacerlo de esta manera.

También creo que para evitar condiciones de carrera podría tener que poner los dos comandos anteriores en una sola tubería de alguna manera.

información relacionada