Rails 3: возврат большого количества данных пользователю через API - PullRequest
2 голосов
/ 26 июня 2011

Мое приложение имеет API, который пользователи могут запрашивать данные.Иногда эти данные требуют времени для обработки и нарушают мой код.

Мне нужно решение для этого, и я думал об использовании delayed_job, но я не уверен, как это работает.Если пользователь делает запрос, мне нужно дать ему ответ.Даже если я обрабатываю данные в фоновом режиме, вызов все равно должен ждать, пока не вернется задание.

Какое решение для этого?Я не уверен, как это сделать.

Спасибо

Ответы [ 2 ]

3 голосов
/ 18 июня 2012

Heroku имеет 30-секундный тайм-аут , поэтому ваши запросы не выполняются (возможно, H12 или H13 в журналах вашей героки).

Есть три способа обойти это.

  1. Оставьте соединение открытым, отправив пустые данные. Вам нужно будет ответить в течение первых 30 секунд и каждые 55 секунд после этого. Используйте промежуток времени для обработки данных. Отправка пробелов не должна влиять на способность браузера читать ответ.

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

  3. опрос Как рекомендует Codeglot, вы можете предоставить пользователю ключ. Чтобы проверить их запрос, они могут пропинговать ваш сервер этим ключом.

0 голосов
/ 26 июня 2011

Сообщите пользователю, что его данные обрабатываются и будут доступны в ближайшее время.Youtube, Vimeo, Facebook, Twitter, все они делают это.

...