Как эффективно реализовать блокирующий вызов с помощью Rails, позволяя клиенту ждать ответа - PullRequest
0 голосов
/ 10 июня 2010

У нас есть веб-сервис, написанный на Rails.API опубликован, и мы не можем его изменить.Наше приложение связывается с удаленным веб-сервисом, который иногда зависает или для ответа требуется несколько секунд.

 Client -> Our Web Service -> Remote Web Service

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

Я видел такие вещи, как mod-x-sendfile, modporter и отложенные задания, но, как я могу сказать, все они предполагают, что клиент нев ожидании ответа.Поскольку API уже установлен, мы не можем сказать клиенту: «Я пытаюсь сделать то, что вы хотите, проверьте ответ позже».

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

Ответы [ 2 ]

2 голосов
/ 11 июня 2010

если вы перенесете задание на delayedJobs или eventmachine, ваш веб-сервер может продолжить работу. Затем, чтобы убедиться, что клиент выполняет занятое ожидание (заблокировано), вы можете использовать ajax / javascript и проверить некоторые URL, чтобы увидеть, была ли работа выполнена. Предположим, что после успешного завершения вы установили или изменили что-то, чтобы можно было показать результат.

Альтернативный подход - использовать juggernaut , чтобы отправить результат обратно клиенту.

0 голосов
/ 10 июня 2010

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

Почему бы просто не сбросить блокирующий вызов на что-то вроде отложенных заданий, а затем отправить ответ обратно пользователю, используя AJAX.Или просто сделайте весь звонок через AJAX.По крайней мере, для пользователя это удалит обновление страницы и заставит их смотреть на пустую страницу в течение 5 или 10 секунд.

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