Java NIO (неблокирующий ввод-вывод) с примером сервер-клиент — java.nio.ByteBuffer и channels.Selector — Java NIO Vs. ИО

Опубликовано: 2021-08-06
Java NIO (неблокирующий ввод-вывод) с примером сервер-клиент — CrunchifyNIOServer.java

Java NIO — моя любимая тема. Я работаю с NIO последние 2 года и хотел бы поделиться простым Server-Client code для своих читателей, которые могут свободно использовать этот код в своей производственной среде.

Начиная с JDK 1.4, NIO был создан, чтобы позволить всем Java-программистам реализовать очень высокоскоростной ввод-вывод без необходимости иметь дело с собственным собственным кодом. NIO использует библиотеку java.nio.buffer по сравнению с простым вводом-выводом, который истощает и заполняет задний буфер внутри любой операционной системы.

В этом руководстве мы рассмотрим библиотеки java.nio.channels и java.nio.channels.Selector .

  • channels представляют соединения с объектами, способными выполнять операции ввода-вывода, такими как файлы и сокеты; определяет селекторы для мультиплексированных неблокирующих операций ввода-вывода.
  • selector можно создать, вызвав open method этого класса, который будет использовать системный поставщик селекторов по умолчанию для создания нового селектора.
объяснение пакета java.nio с подробностями API

Если у вас есть следующие below questions , то вы находитесь в правильном месте:

  • Как начать работу с Java NIO
  • Что такое Java NIO и учебники по Java NIO
  • Асинхронный Java NIO
  • Каково точное использование пакета java nio
  • Учебник по Java NIO
  • Как реализовать высокопроизводительный ввод-вывод с помощью Java NIO

Давайте начнем:

Шаг 1

  • Создайте CrunchifyNIOServer.java , который открывает соединение через port 1111 .
  • используйте isAcceptable() , чтобы проверить, готов ли канал принять новое соединение сокета
    • Если да - подключите
  • используйте isReadable() , чтобы проверить, готов ли канал для чтения
    • если да – читать из буфера и печатать в консоли Eclipse
  • Как только вы получите фамилию компании, нажмите «crunchify».
    • тесная связь

Шаг 2

  • Создайте CrunchifyNIOClient.java , который пытается подключиться к серверу через port 1111 .
  • Создайте ArrayList с 5 названиями компаний
  • Переберите ArrayList и отправьте каждое имя компании на сервер
  • Закрыть соединение после завершения задачи

Взгляните на этот код Java:

Код сервера — CrunchifyNIOServer.java


Клиентский код — CrunchifyNIOClient.java

Java NIO (неблокирующий ввод-вывод) с примером сервер-клиент — CrunchifyNIOClient.java

Результат на стороне сервера:

Результат на стороне клиента:


Несколько часто задаваемых вопросов:

  1. С клиента, как мне поддерживать постоянное соединение?
    • Вы можете использовать socket.setKeepAlive(true); иметь живые соединения со стороны клиента.
  2. Как мне прочитать ответ на сообщение, которое я отправляю на сервер. Сервер продолжает генерировать сообщения каждые 10 секунд. Мне просто нужно прочитать ответ на мой запрос. Насколько я понимаю, TCP «передает» данные вместо конца записи и т. д.
    • Для связи клиент-сервер протокол должен быть четко определен. Вызов readLine() будет заблокирован до тех пор, пока не будут возвращены все данные, поэтому не используйте его. Try reading bytes from the stream until -1 is returned.

Дай мне знать, если это работает.