【问题标题】:Task Queue in GAE JAVA - Battle EngineGAE JAVA 中的任务队列 - 战斗引擎
【发布时间】:2014-12-01 15:09:41
【问题描述】:

我使用 Google App Engine Java 已经一年多了。试着写一个简单的策略游戏。 不幸的是,目前的解决方案并不能让我满意。我对 GAE 的经验甚至不足。

我的问题是模拟一个特定时间的战斗,需要在任务队列中计算。

目前的解决方案:

我在 Datastore 中有实体: BattleInfo(字段:battleID,startTime,userA,userB)

我准备了两个 servlet: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 - 任务将在特定时间开始。我从 BattleID 接收 BattleInfo 并加载所需的数据。模拟战斗并保存到数据存储区。

BattleInitServlet 使用 cron 每 30 分钟执行一次。

通过一些模拟,结果还可以。大量模拟测试,任务队列阻塞。我可以通过更改设置队列来解决这个问题,但是我增加了成本,并没有解决问题。我不知道如何加速和优化。

我测试了运行速度很快的管道 API。问题是流水线API启动了一瞬间,立即执行任务。

我想使用在后台运行的任务准备一个管道,并在指定时间内执行战斗并对其进行模拟。只是不知道如何使用 GAE 和任务编写它。

有人遇到过类似的问题吗?

请帮助我。谢谢你。

【问题讨论】:

    标签: google-app-engine jakarta-ee game-engine pipeline task-queue


    【解决方案1】:

    您不能将 Pipeline API 与您的 Cron 作业链接以延迟执行吗?

    仅供参考,我猜 Pipeline API 在内部也利用了任务队列,但使用分片、切片来优化性能。

    【讨论】:

      猜你喜欢
      • 2012-09-20
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多