2017-09-01 4 views
0

Nachdem der Master die Worker gegabelt hat und nun mit dem Senden von Nachrichten an die Worker-Prozesse beginnen möchte, gibt ein Worker vor dem Senden einer Nachricht die einzige Möglichkeit zum Übergeben der Nachricht an. Die documentation schlägt so vor.Wie wird ein Worker automatisch für die Nachrichtenverarbeitung zugewiesen?

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

Wenn ja, was ist der scheduling policy über alles? Gibt es einen Weg, wo wir könnten:

master.sendToWorker('Hi there!'); 

und es wählt automatisch den Arbeiter nach dem Standard/konfigurierten Algorithmus?

+0

Ich bin mir ziemlich sicher, dass es Codeschnipsel darüber gibt, aber Sie könnten sicherlich eine einfache Lösung in ein paar Zeilen erstellen. – Salketer

+0

Ich habe mein Bestes versucht, um zu antworten, aber war ziemlich vage, da ich das Zielziel dieser Nachricht nicht kannte, die Sie tun möchten. – Salketer

Antwort

1

Die Planungsrichtlinie dient zur Behandlung eingehender Verbindungen. Wenn Sie drei Mitarbeiter haben, die Express-Anwendungen sind, wenn ein Benutzer eine Verbindung herstellt, wird nur ein Mitarbeiter die Anfrage bearbeiten. Es wird entweder Round Robin sein, oder die Wahl von OS. Das gibt Ihnen nicht viel Flexibilität.

Nun, das hilft uns nicht bei Ihrer Anfrage, die Nachrichten vom Master senden soll. Die richtige Lösung hängt von der Art der Nachricht ab, die Sie senden möchten.

Wenn Sie eine Nachricht senden, damit der Worker eine Aufgabe startet, sind die Nachrichten möglicherweise nicht die beste Lösung. Sie können stattdessen stattdessen eine Jobwarteschlange verwenden. Aber wenn Sie trotzdem Nachrichten verwenden möchten, könnte Ihr Master einfach die verfügbaren Mitarbeiter zur Kenntnis nehmen und die Nachricht willkürlich an eine freie Person senden, die sie von den verfügbaren Arbeitern entfernt, bis die Berichte fertig sind.

Sie könnten einfach Ihre Round-Robin-Implementierung in einer Zeile Code verwenden, es würde wie folgt aussehen:

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

Wenn Sie die native Politik nutzen wollen, können Sie Ihre Mitarbeiter hören auf einem bestimmten Port haben könnten und Ihr Master eine Nachricht an diesen Port auf localhost senden, sollte es funktionieren, aber Sie müssen Ihr eigenes Messaging-System zu implementieren ...

IMO, wenn Sie eine Nachricht senden möchten, wissen Sie, wen Sie wollen um es zu senden. Wenn Sie eine Nachricht an einen "zufälligen" Empfänger senden möchten, kann dies daran liegen, dass eine Nachricht möglicherweise nicht die geeignete Methode für die Kommunikation mit diesem Szenario ist.

Verwandte Themen