Evénements envoyés par serveur et diffusion en continu de rails

J’expérimente avec Rails 4 ActionController::Live et Server Sent Events. J’utilise l’IRM 2.0.0 et Puma.

Pour ce que je peux voir, chaque client connecté conserve une connexion active au serveur. Je me demandais s’il était possible d’exploiter les SSE sans maintenir tous les stream de réponses en cours d’exécution.

Puma gère plusieurs connexions à l’aide de threads, et j’imagine qu’il existe une limite au nombre de connexions cuncurrent.
Que se passe-t-il si je souhaite prendre en charge un scénario réel avec des milliers de clients s’inscrivant à mon application Rails pour les événements SSE?

Y a-t-il un exemple?

En outre, je lance généralement des serveurs d’applications Rails derrière un proxy inverse nginx. Cela nécessiterait-il une configuration particulière?

La façon dont les SSE sont construits consiste à ouvrir une connexion au serveur, qui rest ouverte jusqu’à ce que le serveur ait des données à envoyer. Cela fait partie de la spécification SSE, et non une chose spécifique à ActionController :: Live. C’est effectivement la même chose que l’interrogation longue, mais la connexion n’est pas fermée après le retour du premier bit de données et avec le mécanisme intégré au navigateur.

En tant que tel, la seule façon dont il peut être mis en œuvre est d’avoir plusieurs connexions client ouvertes au serveur Web qui s’y trouvent indéfiniment. En ce qui concerne les ressources nécessaires pour y faire face, je ne suis pas sûr, car je n’ai pas encore essayé de le comparer, mais Puma devra disposer de suffisamment de serveurs pour garder des milliers de connexions ouvertes. une page ouverte.

La limite par défaut pour puma est de 16 connexions simultanées. Plusieurs articles sur la création de SSE pour Rails dans les blogs mentionnent une augmentation de cette valeur, mais aucun des articles que j’ai trouvés ne suggère quelle devrait être cette valeur supérieure. Ils mentionnent que le nombre de connexions à la firebase database devra être le même, car chaque thread Rails continue à fonctionner. Sorte de sons comme un moyen coûteux d’exécuter des choses.

“Exécuter un benchmark” est la seule réponse vraiment.

Je ne peux pas commenter pour renverser le proxy car je ne l’ai pas essayé, mais comme les SSE se font sur HTTP standard, je ne devrais pas penser qu’il aura besoin d’une configuration spéciale.