Очередь в тандеме с сервером сокетов Ruby Web - PullRequest
1 голос
/ 09 октября 2011

Я пишу приложение, используя jruby на рельсах. Часть приложения запускает длительный процесс с веб-страницы. В некоторых случаях длительный процесс может длиться 20 минут, но в большинстве случаев он переживает отклик веб-страницы с точки зрения времени. Я также хочу, чтобы работа продолжалась, если пользователь закрывает браузер. Длительный процесс добавит записи в базу данных во время ее работы.

Я хочу дать визуальную информацию о вставках в базу данных на веб-странице, и я бы предпочел использовать веб-сокеты, а не опрашивать базу данных для вставок.

Я думаю об отправке сообщения в очередь восстановления с помощью обработчика очереди, который обеспечит выполнение задания, если пользователь закроет браузер. Обработчик очереди выполнит вставки в базу данных.

Я думал об использовании EM-WebSocket в качестве сервера веб-сокетов.

У меня проблема:

Как я могу связаться между процессом resque и процессом EM-WebSocket? Я хочу как-то передать детали новых вставок в базу данных из процесса resque в экземпляр EM-WebSocket, который будет взаимодействовать с браузером?

Кто-нибудь решил такую ​​проблему или какие-нибудь идеи, как мне это сделать?

1 Ответ

1 голос
/ 10 ноября 2011

Я на самом деле работаю над драгоценным камнем, который делает это довольно простым.Прямо сейчас это довольно голое, но это работает.https://github.com/KellyMahan/RealTimeRails

Он запускает сервер событий для прослушивания обновлений и использует em-websockets для отправки этих обновлений в браузер.

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

Работа еще не завершена, но она может помочь вам.

...