2013-03-31 19 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