Я изучаю пакет NIO. Я ссылаюсь на пример NioServer из здесь . Селекторный поток в NioServer.java
блоках на
this.selector.select();
Iterator<SelectionKey> selectedKeys = this.selector.selectedKeys().iterator();
while (selectedKeys.hasNext()) {
SelectionKey key = selectedKeys.next();
selectedKeys.remove();
if (!key.isValid()) {
continue;
}
if (key.isAcceptable()) {
this.accept(key);
} else if (key.isReadable()) {
this.read(key);
} else if (key.isWritable()) {
this.write(key);
}
Когда подключается удаленный клиент, вызывается this.accept(key)
и в этом методе интерес
InterestOps изменяется на Чтение и пробуждает селектор.
это то, что заставляет селектор выбрать этот канал? Таким образом, мы сигнализируем таким образом, что канал будет выбран?
Теперь предположим, что при записи в селектор канала сокета сигнализируется изменение
Интересно, что канал готов к записи.
Но предположим, что запись не завершена из-за переполнения буфера сокета, как показано в коде, тогда мы не меняем интерес и сохраняем его как только для записи.
тогда когда селектор выберет этот канал?