Java NIO (non-blocking I/O) cu Exemplu Server-Client – ​​java.nio.ByteBuffer și canale.Selector – Java NIO Vs. IO

Publicat: 2021-08-06
Java NIO (I:O fără blocare) cu exemplu server-client - CrunchifyNIOServer.java

Java NIO este subiectul meu preferat. Lucrez cu NIO din ultimii 2 ani și aș dori să partajez un Server-Client code pentru cititorii mei care sunt liberi să folosească acest cod în mediul lor de producție.

Începând cu JDK 1.4, NIO a fost creat pentru a permite tuturor programatorilor Java să implementeze intrare/ieșire de foarte mare viteză fără a fi nevoiți să se ocupe de cod nativ personalizat. NIO folosește biblioteca java.nio.buffer în comparație cu I/O simplă, care drenează și umple tamponul intern în orice sistem de operare.

În acest tutorial vom trece peste bibliotecile java.nio.channels și java.nio.channels.Selector .

  • channels reprezintă conexiuni la entități care sunt capabile să efectueze operațiuni I/O, cum ar fi fișiere și socket-uri; definește selectoare , pentru operațiuni I/O multiplexate, neblocante.
  • selector poate fi creat prin invocarea open method a acestei clase, care va folosi furnizorul de selector implicit al sistemului pentru a crea un nou selector.
explicația pachetului java.nio cu detalii API

Dacă aveți below questions atunci sunteți în locul potrivit:

  • Cum să începeți cu Java NIO
  • Ce este Java NIO și tutorialele Java NIO
  • NIO Java asincron
  • Care este utilizarea exactă a pachetului java nio
  • Tutorial Java NIO
  • Cum se implementează I/O de înaltă performanță cu Java NIO

Să începem:

Pasul 1

  • Creați CrunchifyNIOServer.java care deschide conexiunea pe port 1111
  • utilizați isAcceptable() pentru a verifica dacă canalul este gata să accepte o nouă conexiune socket
    • Dacă da, conectați-l
  • utilizați isReadable() pentru a verifica dacă canalul este gata pentru citire
    • dacă da – citiți din buffer și imprimați pe consola Eclipse
  • Odată ce obțineți numele companiei „crunchify”
    • legătură strânsă

Pasul 2

  • Creați CrunchifyNIOClient.java care încearcă să se conecteze la serverul de pe port 1111
  • Creați ArrayList cu 5 nume de companii
  • Iterați prin ArrayList și trimiteți fiecare nume companie la server
  • Închideți conexiunea după terminarea sarcinii

Aruncă o privire la acest cod Java:

Cod server – CrunchifyNIOServer.java


Cod client – ​​CrunchifyNIOClient.java

Java NIO (I:O fără blocare) cu exemplu server-client - CrunchifyNIOClient.java

Rezultat pe partea serverului:

Rezultat la partea clientului:


Câteva întrebări frecvente:

  1. De la client, cum mențin o conexiune persistentă?
    • Ai putea folosi socket.setKeepAlive(true); pentru a avea conexiuni vii din partea clientului.
  2. Cum citesc un răspuns la mesajul pe care îl trimit serverului. Serverul continuă să genereze mesaje la fiecare 10 secunde. Trebuie doar să citesc răspunsul la cererea mea. Din câte am înțeles, TCP „transmite” date în loc de sfârșitul înregistrării etc.
    • Pentru comunicarea client-server, un protocol trebuie să fie bine definit. readLine() va fi blocat până când toate datele vor fi returnate, așa că nu-l utilizați. Try reading bytes from the stream until -1 is returned.

Anunță-mă dacă funcționează.