2017-10-30 4 views
1

Ich bin ziemlich neu zu socketcluster und Sockets im Allgemeinen. Also habe ich ein Terminal-Chat-Beispiel von https://github.com/devonJS/socket-cluster-chat/socketcluster übergeben Client von einem Arbeiter zum anderen

Ich möchte es auf 2 Arbeiter statt einer skalieren, speziell möchte ich den zweiten Arbeiter als Backup haben. Wenn also der erste Worker stirbt, möchte ich, dass alle Clients eine Verbindung zum Backup-Worker herstellen. Es sollte eine Möglichkeit geben, das richtig zu machen?

Ich habe ein bisschen herumgespielt, aber ich kann es nicht richtig machen. Ich würde wirklich einen Zeiger in die richtige Richtung schätzen. Ich weiß, dass es andere Lösungen wie für immer oder nginx gibt, aber ich möchte es selbst implementieren, weil ich denke erst dann habe ich es verstanden. Ich habe keinen Code gepostet, weil es ziemlich viel ist, aber ich kann es bei Bedarf bearbeiten. Wieder würden alle Zeiger geschätzt werden. Cheers

Antwort

0

Das Übergeben von Instanzen zwischen Prozessen wird in Node.js nicht unterstützt und in den meisten Fällen wäre dies ein Anti-Pattern.

In SocketCluster ist jeder Client-Socket zu einem bestimmten Zeitpunkt mit einem einzelnen Worker verbunden. Wenn Sie mehrere Worker haben, kann der Client-Socket nicht auswählen, mit welchem ​​bestimmten Worker eine Verbindung hergestellt werden soll. Standardmäßig verteilt SC Clients automatisch mithilfe des Round-Robin-Algorithmus des Node.js-Clustermoduls. Dies ist eine Sicherheitsfunktion, um partielle DDoS-Angriffe zu reduzieren (Sie möchten nicht, dass ein böswilliger Client auf Ziel- und DoS-spezifische Mitarbeiter abzielt - Sie müssen diese gleichmäßig auf Worker/CPU-Kerne verteilen).

Im Allgemeinen empfiehlt es sich, zu Sicherungszwecken eine zweite SC-Instanz auf einem anderen Host zu starten.

Sie könnten eine zweite SC-Instanz auf demselben Host an einem anderen Port starten, aber Sie sollten beachten, dass der Betrieb von zwei SC-Instanzen auf demselben Host Sie nicht vor Host- oder Netzwerkfehlern schützt.

Beachten Sie, dass fatale (nicht abgefangene) Fehler in SC zum Absturz eines Arbeiters führen können, aber unter der Annahme, dass der zugrundeliegende Host noch läuft und immer noch mit dem Internet verbunden ist, wird der Worker fast sofort wieder spawnen. Eine gute Möglichkeit, unnötige Workerabstürze zu vermeiden, besteht darin, sicherzustellen, dass Sie Ausnahmen korrekt in Ihrem Code erfassen und behandeln (ohne Speicherverlust).

+0

Vielen, vielen Dank! –

Verwandte Themen