2017-09-01 9 views
0

は、労働者をフォークし、現在のメッセージのメッセージを渡すための唯一の方法を送信する前に労働者を指定して、ワーカープロセスへのメッセージの送信を開始したいと考えていたのか? documentationはそう示唆しています。メッセージ処理のためにワーカーを自動的に割り当てる方法は?マスター後

const worker = cluster.fork(); 
worker.send('hi there'); 

「はい」の場合、scheduling policyは何についてですか?方法はありますどこでした:

master.sendToWorker('Hi there!'); 

と、それは自動的にデフォルト/設定されたアルゴリズムに基づいて労働者を選択?

+0

私はそれについてのコードスニペットを存在しますが、あなたは確かに数行でシンプルなソリューションを作成することができますかなり確信しています。 – Salketer

+0

私はあなたがやりたい、このメッセージのターゲット目標を知らなかったように私は答えるに全力を試してみましたが、かなり漠然としてきました。 – Salketer

答えて

1

スケジューリングポリシーは、着信接続を処理するためのものです。明示的なアプリケーションである3人の従業員がいる場合、ユーザーが接続すると、1人のワーカーしかその要求を処理しません。デフォルトではRound Robin、OSの選択肢のいずれかになります。だから、それはあなたに多くの柔軟性を与えるわけではありません。

さて、それはマスターからのメッセージを送信することですあなたの要求、上で私たちを助けていません。正しい解決方法は、送信したいメッセージの性質によって異なります。あなたは労働者がタスクを開始させるためのメッセージを送信する場合

は、メッセージがあなたの代わりにジョブキューを使用したいかもしれませんが、最善の解決策ではないかもしれません。しかし、もしあなたがメッセージをとにかく使いたいのであれば、あなたのマスターは利用可能な労働者をメモし、自由にメッセージを送ることができます。あなたはネイティブのポリシーを使用したい場合は、あなたの労働者が特定のポートでリッスン持っている可能性があり、

workersList[++messageCount%workersList.length].send("message"); 

あなたは、単にそれは次のようになり1行のコードでは、あなたのラウンドロビンの実装を使用することができますあなたのマスターがlocalhost上のそのポートにメッセージを送信するようにすればうまくいくはずですが、自分のメッセージングシステムを実装する必要があります。

IMO、メッセージを送信する場合は、それを送る。 「ランダム」受信者にメッセージを送信する場合は、メッセージがそのシナリオで通信するのに適切な方法ではない可能性があります。

関連する問題