【问题标题】:Is Play Framework suitable for asynchronous background processing?Play Framework 适合异步后台处理吗?
【发布时间】:2013-11-09 16:24:47
【问题描述】:

我将构建一个用于托管城市游戏的 Web 应用程序。

用户访问我的网站,点击“开始游戏”并在到达某个位置时开始接收一些 SMS 消息,并且必须回答它们才能获得积分。

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

总结一下:我想要一个用 Play 编写的应用程序,它在单击“开始游戏”后为游戏启动一个单独的线程,并且其他用户能够查看他们的数据(统计数据等),而线程按自己的方式工作与游戏逻辑。

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

Play + Akka 是我项目的好选择吗?

【问题讨论】:

    标签: java web-applications playframework playframework-2.0 akka


    【解决方案1】:

    当然。使用 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
            }
          }
        }
      }
    }
    

    【讨论】:

    • 只是想通过扩充问题来解决我的疑问。 Play 被宣传为无状态框架。将状态存储在 cookie 和 DB 中,您只需添加更多部署了相同 Play 应用程序的服务器即可轻松扩展。问题是:当我们引入持久的后台任务或只能从 webapp 的管理部分运行的任务时会发生什么。我们应该在这一点上引入专业化吗? (例如:10 台服务器:7 台用于 Web 前端,2 台用于 gps 跟踪,1 台用于管理部分)。如果是,gps-servers 应该如何与 fontend 服务器通信?链接和文章表示赞赏!
    • @dbau 好的,Java 示例怎么样?我发现了这个 - playframework.com/documentation/2.2.x/JavaAsync 但这不是一个广泛的文档。我可以使用简单的 Java 线程吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多