Очередь задач в GAE JAVA - Battle Engine

Я использую 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 и задач.

У кого-нибудь была подобная проблема?

Пожалуйста помогите. Спасибо.


person Grzegorz S    schedule 01.12.2014    source источник


Ответы (1)


Разве вы не можете связать API конвейера со своим заданием Cron, чтобы отложить выполнение?

К вашему сведению, я полагаю, что Pipeline API также использует внутренние очереди задач, но использует сегментирование, нарезку для оптимизации производительности.

person Price    schedule 22.07.2015