Meine Situation ist, dass wir derzeit eine Online-Anwendung schreiben, die Node.js auf Serverseite mit WebSocket Listener verwendet. Wir haben zwei verschiedene Teile: einer dient Seiten und verwendet node.js und express + ejs, ein anderer ist eine komplett andere App, die nur die socket.io-Bibliothek für Websockets enthält. Also hier kommen wir zu dieser Frage der Skalierbarkeit von Websockets Teil.Cookie-basierter Lastenausgleich für WebSockets?
Eine Lösung, die wir gefunden haben, ist Redis zu verwenden und Socket-Informationen zwischen Servern zu teilen, aber aufgrund der Architektur wird es die gemeinsame Nutzung von vielen anderen Informationen erfordern, was einen enormen Overhead auf den Servern verursachen wird.
Nach diesem Intro ist meine Frage - ist es möglich, Cookie-basierten Lastenausgleich für WebSockets zu verwenden? Das heißt, jede Verbindung von Benutzer mit Cookie Server = Server1 wird immer an Server1 weitergeleitet und jede Verbindung mit Cookie Server = Server2 wird Fw zu Server2 und die Verbindung mit keinem solchen Cookie wird FW zu den am wenigsten ausgelasteten Server sein.
UPDATE: Wie eine "Antwort" sagt - ja, ich weiß, dass das existiert. Ich kann mich nur nicht erinnern, dass dieser Name eine Session ist. Aber die Frage ist - wird das für WebSockets funktionieren? Gibt es mögliche Komplikationen?
Dies ist eine Frage, die mich auch sehr interessiert, nur sehe ich nicht das Problem mit Load-Balancing eingehenden Verbindungen von den Browsern (es wird nur einen der Server treffen und dabei bleiben), ich Ich bin mehr daran interessiert, wie Sie von Ihrem Backend aus auf diese Server zugreifen. Wie, ich habe den Backend-Server, der die eigentliche Arbeit erledigt und dann wird es Nachrichten an websockets Server über einen Socket schieben - woher weiß ich, an welchen man drücken muss, wenn ich einen Cluster habe? Meine derzeitige Idee ist, die Liste aller offenen Verbindungen irgendwo im zentralen db zu behalten, nicht sicher, ob es der beste Weg ist. – KOHb
@ KOHb Ich habe kein zusätzliches Backend hinter Socket-Servern. So ist es in meinem Fall viel einfacher. Aber von dem, was Sie sagen, würde ich Redis Server für diesen Zweck versuchen. – AlexKey