Быстрые ответы AJAX из приложения Rails - PullRequest
1 голос
/ 07 июля 2010

У меня есть необходимость отправлять оповещения в веб-систему мониторинга, написанную на RoR. Решение проблемы грубой силы состоит в том, чтобы часто опрашивать облегченный контроллер с помощью JavaScript. Естественно, недостатком является то, что для того, чтобы получить быстрое время отклика на оповещения, мне пришлось бы очень часто опрашивать (каждые 5 секунд).

Одна из моих идей заключалась в том, что поток опроса, созданный AJAX, спал на стороне сервера до тех пор, пока на сервер не поступило предупреждение. Затем сервер разбудит спящий поток и вернет ответ веб-клиенту, который будет показан немедленно. Это позволило бы мне сократить интервал опроса до одного раза в 30 секунд или каждую минуту, одновременно уменьшая время, необходимое для оповещения пользователя.

Одна вещь, на которую я не рассчитывал, это то, что mongrel / rails не запускает поток для веб-запроса, как я ожидал. Это означает, что другие входящие веб-запросы блокируются до истечения времени ожидания первого потока.

Я пытался возиться с вызовом "config.threadsafe!" в моей конфигурации, но это, похоже, не меняет поведение на поток для модели запроса. Плюс, похоже, что работает с config.threadsafe! это рискованное предложение, которое может потребовать гораздо большего тестирования и переделки моего существующего приложения.

Есть какие-нибудь мысли о подходе, который я выбрал, или о том, как лучше найти время ответа, которое я ищу, без необходимости наводить сервер запросами?

Ответы [ 3 ]

1 голос
/ 07 июля 2010

Вы можете использовать Rails Metal для улучшения производительности контроллера или, возможно, даже полностью разделить его на Sinatra приложение (Sinatra может обрабатывать некоторые серьезные запросы).

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

0 голосов
/ 09 июля 2010

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

0 голосов
/ 07 июля 2010

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

...