Ich verwende Redis für mein Rails-Projekt, um Kanäle zu abonnieren und in diesen Kanälen zu veröffentlichen, wenn ein Ereignis eintritt. Auf der Client-Seite registriere ich mich bei EventSource, die diesen Kanälen entspricht. Immer wenn ein Ereignis für den abonnierten Kanal auf dem Server auftritt, schreibt der Server eine SSE, so dass alle registrierten Clients das Update erhalten.Server sendet Ereignisse, Puma, Rails und max dedizierte Threads für jeden Client
Jetzt bleibt die Verbindung mit dem Server für jeden Client am Leben, der diese Kanäle abonniert hat, d. H. Server-Thread, der diesem Client zugeordnet ist, läuft weiter, bis der Client die Verbindung trennt. Wenn bei diesem Ansatz 1000 gleichzeitige Benutzer einen Kanal abonniert haben, hätte ich 1000 TCP/IP-Verbindungen geöffnet.
Ich verwende Puma als Webserver wie in this tutorial vorgeschlagen. Puma gibt standardmäßig 16 maximale Threads an. Ich kann dieses Limit auf ein höheres Limit ändern.
Ich weiß vielleicht nicht, wie viele gleichzeitige Benutzer es in meiner App zu einer Zeit sein könnte und weiß nicht, was max. von Threads kann ich in Puma angeben. Wenn im schlimmsten Fall die Anzahl der Threads, die jedem einzelnen Benutzer zugewiesen sind, die maximale Anzahl der für den Puma-Webserver angegebenen Threads erreicht, wird die Anwendung für alle Benutzer angehalten, bis einer der Benutzer die Verbindung getrennt wird.
Ich war aufgeregt zu verwenden Rails Live-Streaming, und Server gesendet Ereignisse in meinem Rails-Projekt, aber mit diesem Ansatz riskiere ich das Limit der maximalen Threads in meinem Web-Server und damit App reagiert für alle Benutzer bis eine von Der gleichzeitige Benutzer trennt die Verbindung.
Nicht sicher, was ist die typische maximale Anzahl von Threads für Puma für eine große Anzahl gleichzeitiger Benutzer.
Sollte ich andere Ansätze in Betracht ziehen - vielleicht ajax-basierte Polling oder Node.js, die ein ereignisgesteuertes, nicht blockierendes I/O-Modell verwendet? Oder einfach ein paar Benchmarks ausführen, um zu wissen, wie hoch meine maximale Anzahl an Threads sein kann?