Разница B / WA NIO Server и однопоточный сервер - PullRequest
0 голосов
/ 06 апреля 2019

Я проходил через NIO Java и не смог понять, как это на самом деле помогает мне.Рассмотрим сервер, который прослушивает какой-либо порт и, когда соединение установлено, обслуживает это соединение и возвращается к socket.accept(), ожидая нового соединения.

Теперь, если бы я написал этот сервер с использованием NIOЯ бы зарегистрировал свой ServerSocketChannel с помощью Selector, а затем опросил Selector в цикле while, чтобы узнать, произошло ли какое-либо интересующее меня событие.Если да, то я получаю Set из SelectedKeys и обрабатываю каждый из них.

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

Не придется ли мне по-прежнему создавать новый поток каждый раз, когда selector.select() возвращает> 0, чтобы я мог продолжать опросSelector?Затем это становится потоком для каждого проекта подключения, что мы давно используем с любым NIO.

Чего мне не хватает?Как NIO помогает мне масштабировать?

Однопоточный сервер:

while(true) {
    Socket sock = serverSocketObject.accept();
    //serve this connection
}
...