Вопрос по google-app-engine, httpwebrequest, java, python, keep-alive – Как сохранить приложение App Engine / Java с глухими запросами от веб-cron Java / Python?

3
App Engine allows you 30 seconds to load your application My application takes around 30 seconds - sometimes more, sometimes less. I don't know how to fix this. If the app is idle (does not receive a request for a while), it needs to be re-loaded.

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

Но здесь есть одна загвоздка. , ,

Если я пингую приложение, и оно уже выгружено App Engine, мой веб-запрос будет первым запросом к приложению, и приложение попытается перезагрузиться. Это может занять более 30 секунд и превысить ограничение времени загрузки.

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

Любые предложения для хорошего способа сделать это в веб-cron Python или Java (я предполагаю, что решение Python будет проще)?

Я думаю, что у dfa правильная идея - вероятно, лучше использовать ваше время, чтобы выяснить, почему загрузка вашего приложения занимает 30 секунд. Сколько времени занимает типичный запрос после его загрузки? Требуется ли 30 секунд для запуска при запуске в среде разработчика или только при развертывании? Вы где-то учитываете большие числа в статическом инициализаторе? :) Peter Recore
Определенно лучше выяснить, почему вашему приложению требуется 30 секунд для запуска. Это очень долгое время для веб-приложения. Nick Johnson
почему ваше приложение загружается за 30 секунд? что ты используешь? log4j? dfa
Привет, давайте предположим, что он уменьшит его до 5 с. Разумно ли иметь 5 с на каждый запрос - НЕТ! Создание cron или любого другого вида периодических HTTP-запросов для поддержания работоспособности экземпляра не имеет смысла. Во-первых, нет никаких доказательств того, что этот экземпляр будет обслуживать следующий поступающий запрос (например, из другого сетевого расположения и т. Д.), Во-вторых, он будет использовать квоту (что является меньшей проблемой). Я рассматриваю это как блокиратор для использования продукции GAE ... Konrad

Ваш Ответ

4   ответа
1

в которой она может быть всегда включена. Стоит около 0,30 доллара США центов в день. Просто зайдите в настройки биллинга и включите его, если вы не против заплатить за эту функцию. Я считаю, что это гарантирует вам, по крайней мере, 3 экземпляра всегда работает.

(Я не догадывался, что нажатие на URL-адрес / ping, приводящее к ускорению экземпляра, приведет к превышению 30-секундного лимита!)

1

URLConnection hcon = new URL("http://www.google.com").openConnection();
hcon.connect();
hcon.getInputStream().read();
2

Cron встроен в App Engine чтобы сохранить ваше приложение в живых.

1

import httplib
hcon = httplib.HTTPConnection("foo.appspot.com")
hcon.request("GET", "/someURL")
hcon.close()
Ник, насколько я понимаю, он планировал запустить этот код пинга на компьютере / за пределами / App Engine.
httplib в App Engine реализован с помощью API urlfetch - этот фрагмент не будет выполнять то, что вы ожидаете.

Похожие вопросы