2013-11-09 30 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