Отправленные сервером события и потоки Rails

Я экспериментирую с Rails 4 ActionController::Live и Server Sent Events. Я использую MRI 2.0.0 и Puma.

Для того, что я вижу, каждый подключенный клиент поддерживает активное соединение с сервером. Мне было интересно, можно ли использовать SSE без поддержки всех потоков ответов.

Puma управляет несколькими соединениями с помощью потоков, и я полагаю, что существует ограничение на количество подключений cuncurrent.
Что делать, если я хочу поддержать реальный сценарий, когда тысячи клиентов регистрируются в моем приложении Rails для событий SSE?

Есть ли какой-нибудь пример?

Кроме того, я обычно запускаю серверы приложений Rails за обратным прокси-сервером nginx. Требуется ли какая-либо конкретная настройка?

Ответ 1

Способ создания SSE - это клиент, открывающий соединение с сервером, который затем остается открытым до тех пор, пока у сервера не будет данных для отправки. Это часть спецификации SSE, а не для ActionController:: Live. Это эффективно так же, как и длительный опрос, но с закрытием соединения после того, как возвращается первый бит данных, и с механизмом, встроенным в браузер.

Таким образом, единственный способ, которым он может быть реализован, заключается в наличии нескольких открытых клиентских подключений к веб-серверу, которые находятся там неограниченно долго. Что касается того, какие ресурсы необходимы для решения этих проблем, я не уверен, так как я еще не пытался сравнивать это, но для Puma потребуется достаточно серверов для того, чтобы открывать тысячи подключений, если у вас есть много пользователей с страница открыта.

Предел по умолчанию для puma - 16 одновременных подключений. Несколько сообщений в блогах о настройке SSE для Rails говорят об увеличении этого значения, но ни один из них, который я нашел, не указывает на то, что должно быть выше. Они упоминают, что количество соединений БД должно быть одинаковым, так как каждый поток Rails поддерживает один из них. Сорт звуков, как дорогой способ запускать вещи.

"Запустить тест" - это единственный ответ.

Я не могу комментировать, как обратное проксирование, поскольку я его не пробовал, но поскольку SSE выполняются по стандартным HTTP, я не должен думать, что для этого потребуется специальная настройка.