関連リンク

関連リンク

実装する方法はありますか?公開/購読パターンサーバー プロセスを使用せずにコマンド ラインから実行できますか? これは 1 台のマシンでのみ実行する必要があります。

サーバー プロセスを持たないことで私が避けたい主なことは、これらのツールを使用するためにマシンを構成する必要があることです。また、サーバー プロセスが停止する可能性に対処する必要がないことも重要です。|

次のようになります:

# 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 は役に立ちません。皮肉なことに、通常のファイルは、ファイル記述子がファイルの変更を追跡するため、まさに必要なことを行います。これを上書きと組み合わせると、新しい上書きが発生する前にすべての変更が公開されることが保証され、1 つのメッセージのみが格納されます。

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 が行うすべてのことを実行しますが、スクリプトに組み込むことを想定しているため、このように記述されています。

関連情報