Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 播放框架可以';t处理超过12个并发连接_Java_Playframework_Playframework 2.0_Akka_Akka Http - Fatal编程技术网

Java 播放框架可以';t处理超过12个并发连接

Java 播放框架可以';t处理超过12个并发连接,java,playframework,playframework-2.0,akka,akka-http,Java,Playframework,Playframework 2.0,Akka,Akka Http,我有一个香草播放2.6应用程序,不能处理超过12个并发连接。这也会影响游戏2.5 这是一个示例控制器: public class TestController extends Controller { public Result index() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace()

我有一个香草播放2.6应用程序,不能处理超过12个并发连接。这也会影响游戏2.5

这是一个示例控制器:

public class TestController extends Controller {

    public Result index() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return ok("");
    }

}
使用12个并发连接进行测试:

ab -n 12 -c 12 http://localhost:9000/
ab -n 13 -c 13 http://localhost:9000/
输出:

...
Concurrency Level:      12
Time taken for tests:   1.005 seconds
Complete requests:      12
...
...
Concurrency Level:      13
Time taken for tests:   2.004 seconds
Complete requests:      13
...
因此,所有12个并发请求都在1秒内响应,这是预期的结果

使用13个并发连接进行测试:

ab -n 12 -c 12 http://localhost:9000/
ab -n 13 -c 13 http://localhost:9000/
输出:

...
Concurrency Level:      12
Time taken for tests:   1.005 seconds
Complete requests:      12
...
...
Concurrency Level:      13
Time taken for tests:   2.004 seconds
Complete requests:      13
...
现在13个并发连接需要2秒钟。这两种情况都经过多次测试,结果一致


为什么会这样?Play应该能够处理12个以上的并发连接吗?

Play基本上使用非阻塞IO,并且不会为每个请求分配线程。因此,当您使用类似于
Thread.sleep
的方法时,您会阻止Play使用线程处理其他请求


在执行阻塞IO时,文档建议使用专用线程池。您可以在官方文档中阅读更多信息以及如何处理这种情况:

Play at's base使用非阻塞IO,不会为每个请求分配线程。因此,当您使用类似于
Thread.sleep
的方法时,您会阻止Play使用线程处理其他请求


在执行阻塞IO时,文档建议使用专用线程池。您可以在官方文档中阅读更多信息以及如何处理此案件:

谢谢,我一定是一时精神错乱。我知道神奇的数字12是从哪里来的——它是我的CPU线程数。谢谢,我一定有一个暂时的疯狂时刻。我知道神奇的数字12来自哪里——它是我的CPU线程数。