Play Framework не может обрабатывать более 12 одновременных подключений - PullRequest
0 голосов
/ 18 октября 2018

У меня есть ванильное приложение Play 2.6, которое не может обрабатывать более 12 одновременных подключений.Также влияет на Play 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/

выход:

...
Concurrency Level:      12
Time taken for tests:   1.005 seconds
Complete requests:      12
...

Таким образом, все 12 одновременных запросов ответили в течение 1 секунды, что и ожидалось.

Тестирование с 13 одновременными подключениями:

ab -n 13 -c 13 http://localhost:9000/

вывод:

...
Concurrency Level:      13
Time taken for tests:   2.004 seconds
Complete requests:      13
...

Теперь 13 одновременных подключений заняли 2 секунды.Обе ситуации были протестированы несколько раз и дали согласованные результаты.

Почему это происходит?Конечно, Play должен уметь обрабатывать более 12 одновременных подключений?

1 Ответ

0 голосов
/ 18 октября 2018

Воспроизведение на его базе использует неблокирующий ввод-вывод и не будет выделять поток для запроса.Поэтому, когда вы используете метод, такой как Thread.sleep, вы запрещаете Play использовать поток для обработки других запросов.

При выполнении блокировки ввода-вывода в документации рекомендуется использовать выделенный пул потоков.Вы можете прочитать больше информации и как обращаться с этим делом в официальной документации: https://www.playframework.com/documentation/2.6.x/ThreadPools#Understanding-Play-thread-pools

...