【发布时间】: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