클라이언트는 UNIX 도메인 소켓을 사용하여 어떻게 다른 클라이언트와 통신합니까?

클라이언트는 UNIX 도메인 소켓을 사용하여 어떻게 다른 클라이언트와 통신합니까?

Bash를 사용하면 netcat을 사용하여 비슷한 결과를 얻을 수 있습니다.

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

클라이언트는 다음과 같이 데이터를 보냅니다.

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

클라이언트는 다음과 같은 데이터를 기다립니다.

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

done;

내 질문 - 모든 클라이언트를 포함하지 않고 한 클라이언트에서 다른 클라이언트로 데이터를 보내는 방법은 무엇입니까? "서버"에는 각 클라이언트에 대한 참조를 저장해야 하므로 한 클라이언트로부터 메시지를 받으면 누구에게 메시지를 전달할지 알 수 있습니다. 현재 연결된 클라이언트에 대한 참조를 어떻게 저장합니까? 웹소켓과 마찬가지로 채널을 만들고 싶고 채널에 등록하는 사람은 누구나 메시지를 받게 됩니다.

답변1

그래서 여기에 문제가 있습니다. 클라이언트에게 다음과 같이 응답할 수 있을 것 같습니다.

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

하지만 요점은 고객이 누구인지에 따라 어떻게 다르게 대응할 것인가 하는 것입니다. 내 말은, 고객 요청 등에 기반한 논리 없이 어떻게 정말 유용한 것을 만들 수 있습니까?

내 유일한 추측은 두 개의 서버가 있다는 것입니다.

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

  # custom logic goes here

done > nc -lk -U /my/fifo2

그런 다음 클라이언트가 연결됩니다.

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

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

done; 

이는 tcp 및 unix 도메인 소켓이 Node.js 등과 함께 작동하는 방식에 대해 내가 아는 모든 것에 위배됩니다. 하지만 bash에서는 이 작업을 수행해야 할까요?

또한 경쟁 조건을 피하려면 위의 두 명령을 어떻게든 파이프라인에 넣어야 할 수도 있다고 생각합니다.

관련 정보