클라이언트가 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를 사용하면 이런 식으로 해야 할까요?

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

관련 정보