2013-11-09 27 views
1

我打算构建一个将要主办城市游戏的网络应用程序。Play框架适合异步后台处理吗?

用户访问我的网站,点击“开始游戏”,并开始收到一些短信,当到达某个位置,并必须回答他们获得积分。

是否适合这种应用?点击“开始游戏”按钮后,一些逻辑必须按照自己的方式进行。我将如何处理球员的地理位置检查(我有API)并行?我想每5秒就能ping通一次。并做一些逻辑。用户当然必须能够在处理他的位置,分配点数,发送和接收消息等的同时使用web应用程序。

因此总结一下:我想要一个用Play编写的应用程序,点击“开始游戏”后其他用户可以查看自己的数据(统计信息等),而线程可以通过游戏逻辑工作。

我找到类似jobs的东西,但它们被记录在版本1.2中。经过一番阅读后发现,Akka现在是推荐的,但它使用和演员模型。

是Play还是Akka是我项目的不错选择?

回答

4

绝对。使用Play Framework在单独的ThreadPool(也称为ExecutionContext)中设置计算非常简单。你可能想在documentation here读了,但你会想要做这样的事情在你的Application.scala控制器文件简而言之(注意这个例子中使用的Scala):

// Async Action that's triggered when a user clicks "Start Game". 
    // Runs logic in separate gameLogicContext thread pool and asynchronously returns a response without blocking of Play's default thread pool. 
    def startGame = Action.async { implicit request => 

    Future { 

     // ... your game logic here. This will be run in gameLogicContext 

     Ok("Game started in separate thread pool") // http response 

    }(Contexts.gameLogicContext) // the thread pool the future should run in. 

    } 

,然后你会成立在您的application.conf文件中单独的gameLogicContext线程池:

play { 
    akka { 
    actor { 
     game-logic-context = { 
     fork-join-executor { 
      parallelism-min = 300 
      parallelism-max = 300 // thread pool with 300 threads 
     } 
     } 
    } 
    } 
} 
+0

只是想通过扩大问题来解决我的疑惑。游戏被宣传为无国籍框架。将状态存储在Cookie和数据库中,您只需通过添加部署了相同Play应用程序的更多服务器即可轻松进行扩展。问题是:当我们引入长期后台任务或只能从webapp的管理部分运行的任务时会发生什么。我们是否应该引入专业化? (例如:10个服务器:7个用于web前端,2个用于gps跟踪,1个用于管理部分)。如果是的话,gps服务器应该如何与fontend服务器通信?链接和文章感谢! – cosmolev

+0

@dbau好的,Java示例呢?我发现这个 - http://www.playframework.com/documentation/2.2.x/JavaAsync但这不是一个广泛的文档。我可以使用简单的Java线程吗? – pmichna