Tomcat / обработка соединений при использовании режима NIO - PullRequest
0 голосов
/ 27 мая 2020

У меня есть сервер веб-сокетов, который запущен на Tomcat.

Tomcat работает в режиме NIO - неблокирующий ввод-вывод (гораздо больше соединений, чем потоков).

maxConnections = 1000 maxThreads = 200

Предположим, что 300 подключений, например, все 300 пользователей могут обслуживаться Tomcat одновременно ??

Я имею в виду, что один поток из пула может переключаться между 2 или более подключениями из-за 300> 200?

1 Ответ

0 голосов
/ 28 мая 2020

В то время как Tomcat может управлять большим количеством подключений, чем текущих запросов (что означает, что работа с этими запросами активно выполняется), текущие запросы ограничены количеством потоков обработки запросов.

Итак, если у вас 200 потоков, вы можете одновременно работать только с 200 запросами. Остальные 300 запросов будут находиться в очереди до тех пор, пока не станет доступен поток обработки запросов.

Это Вышеупомянутая ситуация имеет место для «обычных» запросов с использованием стандартного HTTP-запроса-ответа.

Если вы переключаетесь в асинхронный режим, все меняется. Если вы обновите соединение до Websocket, все также изменится. Но это совершенно разные модели ввода-вывода и диспетчеризации, в которых термин «запрос» теряет свое первоначальное значение.

Я считаю, что Tomcat выделяет один поток на соединение для обновленного Websocket соединение, и этот поток будет обрабатывать соединение, а не другие. Таким образом, при обновлении до Websocket вы превращаете модель диспетчеризации запросов Tomcat из одного потока на запрос в один поток на соединение.

...