2013-03-31 21 views
1

我目前正在評估異步場景中的播放2.0框架。我做了如下實驗:播放2.0 forkjoin線程數高

def test = Action { 
    val futureResponse: Future[play.libs.WS.Response] = scala.concurrent.Future { 
    val remoteCall = WS.url("http://127.0.0.1:8080/slowweb/SlowServlet1").get(); 
    remoteCall.get(); 
    } 
    Async { 
    futureResponse.map(response => Ok("Got result: " + response.getBody())) 
    } 
} 

的「:8080/slowweb/SlowServlet1」是一個緩慢的Web服務調用的模擬,它需要2秒返回。

然後我運行jmeter對端點「:9000/test」。我觀察到以下行爲:如果我在jmeter中運行50個線程,forkjoin池大小爲50;如果我在jmeter中運行200個線程,forkjoin池大小爲200.

它看起來像線程池大小與併發請求大小相同。我期望的是,如果使用異步方法,線程池的大小應該小得多。

我做錯了什麼?

感謝

回答

1

我不知道這是否與您的錯誤,但你的代碼可以簡化爲這樣:

def test = Action { 
    Async { 
    val futureResponse: Future[play.libs.WS.Response] = 
     WS.url("http://127.0.0.1:8080/slowweb/SlowServlet1").get(); 

    futureResponse.map(response => Ok("Got result: " + response.getBody())) 
    } 
} 
+0

感謝您的答覆。但是「WS.url(」http://127.0.0.1:8080/slowweb/SlowServlet1「).get();」返回F.Promise [響應],而不是未來。 – Frank

+0

對不起。你在使用Play 2.0.x嗎?我的代碼是2.1.x. –

+0

嗨Ekito,看起來像問題解決。我接受你的建議並將該行更改爲:val futureResponse:Future [play.libs.WS.Response] = WS.url(「http://127.0.0.1:8080/slowweb/SlowServlet1」).get()。getWrappedPromise (); – Frank