Я преобразую серверное приложение Java, которое использовало блокирование ввода-вывода и потока на клиенте, в NIO и один поток ввода-вывода (возможно, пул потоков после того, как я выполнил базовую реализацию). Единственное, с чем я сталкиваюсь, это отключение клиентов после того, как они простаивают в течение определенного периода.
Ранее я использовал SO_TIMEOUT и блокировал чтение. Однако при использовании ввода-вывода на основе селектора чтение не блокируется ... Я надеялся, что смогу установить тайм-аут и выбрать при тайм-ауте чтения что-то вроде SelectionKey.isReadTimeout (), но ничего подобного кажется, что существует.
Текущее лучшее решение, которое я нашел, - это иметь таймер с TimerTask для каждого канала, который ожидает чтения, а затем отменять и перепланировать каждый раз, когда происходит чтение. Есть ли лучшее решение?