クライアントは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 つのクライアントからメッセージを受信すると、誰にメッセージを渡すかを知ることができます。現在接続されているクライアントへの参照をどのように保存しますか? Webソケットと同様に、チャンネルを作成したいチャンネルに登録した人は誰でもメッセージを受け取ります。

ベストアンサー1

だからここに問題があります。クライアントに次のように応答できるようです。

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

しかし、要点は、顧客が誰であるかによってどのように異なる方法で対応するのかということです。私の言葉は、顧客の要求などに基づく論理なしでどのように本当に便利なものを作成できますか?

私の唯一の推測は、2つのサーバーがあるということです。

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ではこれを行う必要がありますか?

また、競合状態を回避するには、上記の2つのコマンドを何らかの方法でパイプラインに入れる必要があるかもしれません。

おすすめ記事