Как выполнить обратный вызов ajax после завершения отложенного задания в Ruby on Rails? - PullRequest
3 голосов
/ 14 января 2011

Я разрешаю пользователям на моем сайте вращать свои фотографии. Я выполняю это с помощью ajax-вызова процесса Delayed_Job (через Heroku), который поворачивает фотографию. После того, как они нажимают «повернуть фотографию», я показываю загрузочный счетчик. Но мой вопрос заключается в следующем: каков наилучший способ для моей страницы узнать, когда задание Delayed_Job завершено, чтобы я мог загрузить новую фотографию?

Нужно ли проводить непрерывный ajax-опрос моего сервера, чтобы определить, завершено ли отложенное задание? Или я могу каким-либо образом реализовать обратный вызов ajax на своей странице, который будет уведомлять мою страницу о завершении отложенного задания?

Заранее спасибо.

1 Ответ

5 голосов
/ 14 января 2011

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

Без сокетов в настоящее время невозможно, чтобы ваш сервер отправлял сообщение клиенту без запроса клиента.

В любом случае, вы должны решить, оправдывает ли необходимость или желание справиться с заданием всю дополнительную работу, связанную с опросом / кометой / сокетами. Поворот изображения не должен занимать много времени. В зависимости от того, можете ли вы позволить себе заблокировать серверный процесс, было бы намного проще просто манипулировать изображением на переднем плане (не delayed_job). Затем, когда ajax-запрос к этому действию завершен, вы знаете, что задача выполнена.

...