Java NIO (Non-blocking I/O) z Przykładem Serwer-Klient – ​​java.nio.ByteBuffer i channels.Selector – Java NIO Vs. IO

Opublikowany: 2021-08-06
Java NIO (nieblokujące I:O) z przykładem serwer-klient — CrunchifyNIOServer.java

Java NIO to mój ulubiony temat. Pracuję z NIO od 2 lat i chciałbym udostępnić prosty Server-Client code moim czytelnikom, którzy mogą swobodnie używać tego kodu w swoim środowisku produkcyjnym.

Począwszy od JDK 1.4, NIO zostało stworzone, aby umożliwić wszystkim programistom Java implementację bardzo szybkich operacji wejścia/wyjścia bez konieczności zajmowania się niestandardowym kodem natywnym. NIO używa biblioteki java.nio.buffer w porównaniu z prostymi operacjami we/wy, które opróżniają i wypełniają bufor wewnętrznie dowolnego systemu operacyjnego.

W tym samouczku omówimy biblioteki java.nio.channels i java.nio.channels.Selector .

  • channels reprezentują połączenia z jednostkami, które są zdolne do wykonywania operacji we/wy, takich jak pliki i gniazda; definiuje selektory dla multipleksowanych, nieblokujących operacji we/wy.
  • selector może zostać utworzony przez wywołanie open method tej klasy, która użyje domyślnego dostawcy selektora systemu do utworzenia nowego selektora.
Objaśnienie pakietu java.nio ze szczegółami API

Jeśli masz below questions , to jesteś we właściwym miejscu:

  • Jak zacząć korzystać z Java NIO
  • Czym są samouczki Java NIO i Java NIO
  • Asynchroniczny Java NIO
  • Jakie jest dokładne zastosowanie pakietu java nio
  • Samouczek Java NIO
  • Jak zaimplementować wysokowydajne we/wy za pomocą Java NIO

Zacznijmy:

Krok 1

  • Utwórz CrunchifyNIOServer.java , który otwiera połączenie na port 1111
  • użyj isAcceptable() , aby sprawdzić, czy kanał jest gotowy do przyjęcia nowego połączenia z gniazdem
    • Jeśli tak – podłącz go
  • użyj isReadable() , aby sprawdzić, czy kanał jest gotowy do odczytu
    • jeśli tak – odczytaj z bufora i wydrukuj na konsoli Eclipse
  • Po otrzymaniu ostatniej nazwy firmy „crunchify”
    • zamknij połączenie

Krok 2

  • Utwórz CrunchifyNIOClient.java , który próbuje połączyć się z serwerem na port 1111
  • Utwórz ArrayList z 5 nazwami firm
  • Przejdź przez ArrayList i wyślij każdą nazwę firmy na serwer
  • Zamknij połączenie po zakończeniu zadania

Spójrz na ten kod Java:

Kod serwera – CrunchifyNIOServer.java


Kod klienta – CrunchifyNIOClient.java

Java NIO (nieblokujące I:O) z przykładem serwer-klient — CrunchifyNIOClient.java

Wynik po stronie serwera:

Wynik po stronie klienta:


Kilka często zadawanych pytań:

  1. Jak mogę utrzymać stałe połączenie od klienta?
    • Możesz użyć socket.setKeepAlive(true); aby połączenia były aktywne po stronie klienta.
  2. Jak odczytać odpowiedź na wiadomość wysłaną na serwer. Serwer generuje wiadomości co 10 sekund. Muszę tylko przeczytać odpowiedź na moją prośbę. Z tego, co rozumiem, TCP „przesyła” dane zamiast końca rekordu itp.
    • Do komunikacji klient-serwer musi być dobrze zdefiniowany protokół. readLine() będzie blokowane do momentu zwrócenia wszystkich danych, więc nie używaj go. Try reading bytes from the stream until -1 is returned.

Daj mi znać, czy działa.