Я использую Google App Engine Java более года. Пытаюсь написать простую стратегическую игру. К сожалению, нынешнее решение меня не удовлетворяет. Мой опыт работы с GAE даже недостаточен.
Моя задача - смоделировать бой в определенное время, которое должно быть рассчитано в очереди задач.
Текущее решение:
У меня есть объекты в хранилище данных: BattleInfo (поле: battleID, startTime, userA, userB)
Я подготовил два сервлета: BattleInitServlet и BattleServlet.
BattleInitServlet - выполнить запрос к хранилищу данных и загрузить BattleInfo. В очередь боя добавлены задания:
Queue queue = QueueFactory.getQueue("battle-queue");
...
for(BattleInfo i : list){
long countdownMillis = i.getStartTime() - currentTime;
queue.add(TaskOptions.Builder.withUrl("/battle").param("battleID", i.getBattleID()).method(TaskOptions.Method.POST).countdownMillis(countdownMillis));
}
BattleServlet - задача будет запущена в определенное время. Я получаю BattleInfo от battleID и загружаю необходимые данные. Имитирует бой и сохраняет в хранилище данных.
BattleInitServlet выполняется каждые 30 минут с использованием cron.
После небольшого моделирования результат в порядке. Тесты с большим объемом моделирования, очередь задач забита. Я могу решить это, изменив настройки Очереди, но я увеличиваю затраты, а не решаю проблему. Не знаю, как ускорить и оптимизировать.
Я протестировал API конвейера, который работает быстро. Проблема в том, что API конвейера инициирует момент и немедленно выполняет задачи.
Я хочу подготовить конвейер, используя задачи, которые выполняются в фоновом режиме, выполняли битву в течение определенного времени и имитировали ее. Просто не умею писать с помощью GAE и задач.
У кого-нибудь была подобная проблема?
Пожалуйста помогите. Спасибо.