Play 2.0 forkjoin线程数高

时间:2013-03-31 19:16:11

标签: scala asynchronous playframework-2.0

我目前正在评估异步场景中的Play 2.0框架。我做了如下实验:

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秒才能返回。

然后我对端点“:9000 / test”运行jmeter。我观察到以下行为:如果我在jmeter中运行50个线程,则forkjoin池大小为50;如果我在jmeter中运行200个线程,则forkjoin池大小为200。

在我看来,线程池大小与并发请求大小相同。我期望的是,如果使用异步方法,线程池大小应该小得多。

我做错了吗?

由于

1 个答案:

答案 0 :(得分: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()))
   }
}