客戶端如何使用 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;

我的問題 - 如何在不涉及所有客戶端的情況下將資料從一個客戶端發送到另一個客戶端?在“伺服器”上,我需要儲存對每個客戶端的引用,因此當我從一個客戶端收到訊息時,我知道要將該訊息轉發給誰?如何儲存對目前連線的客戶端的引用?就像 websockets 一樣,我想創建通道,註冊到該通道的任何人都會收到訊息。

答案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 我們必須這樣做?

我還認為,為了避免競爭條件,可能必須以某種方式將上述兩個命令放在一個管道中。

相關內容