実装する方法はありますか?公開/購読パターンサーバー プロセスを使用せずにコマンド ラインから実行できますか? これは 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
関連リンク
- POSIX の IP アドレスサーバーレスを提供するメッセージキューコマンドラインクライアントもあります(1) (2) (3)これを何らかの状態ストレージと組み合わせて使用することで、上記を実装できます。
- ジミー提供するpub/sub通信のプロトコル類似のコマンドラインツールがありますいいえ使用についてジミー、 のようなズムキャットこれらは、最小限のコマンドラインpub/subパターンを設定するために使用できます。サーバー付き。
- Linuxでは別のIPCメカニズムとして名前付きパイプ (cf mkfifo)複数の消費者がどのような動作をするのかは分かりませんが、初期の実験では、各メッセージは消費者の一人が受け取った
答え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 が行うすべてのことを実行しますが、スクリプトに組み込むことを想定しているため、このように記述されています。