相關連結

相關連結

有沒有辦法實現發布/訂閱模式從命令列而不使用伺服器進程?這只需要在一台機器上工作。

我想透過沒有伺服器進程來避免的主要事情是配置機器來使用這些工具。我也非常希望不必處理我的伺服器進程死亡的可能性。

這可能看起來像:

# client 1
subscribe name | while read line; do echo $line; done

# client 2
subscribe name | while read line; do echo $line; done

# server
echo message | publish name

相關連結

答案1

所有訂閱者都需要以不影響其他訂閱者的方式收到新資料的通知,並且伺服器不必追蹤訂閱者收到的資料。這使得 FIFO 對於此目的毫無用處。諷刺的是,常規文件將完全執行您想要的操作,因為常規文件上的文件描述符會追蹤文件變更。您可以將其與覆蓋結合起來,以確保在發生新的覆蓋之前發布所有更改,這意味著您只儲存一條訊息。

touch pubsub

tail -f pubsub | while read line; do echo $line; done
tail -f pubsub | while read line; do echo $line; done

echo "message" | cat > pubsub

您將在標準錯誤上收到“檔案被截斷”,這是預期的行為,但如果您不想看到它,請添加 2> /dev/null

tail 實際上正在執行 read 和 echo 所做的所有事情,但它是這樣寫的,因為我假設您想將它合併到腳本中。

相關內容