Java NIO (I/O non bloccante) con esempio server-client – ​​java.nio.ByteBuffer e channels.Selector – Java NIO vs. IO

Pubblicato: 2021-08-06
Java NIO (I:O non bloccante) con esempio server-client - CrunchifyNIOServer.java

Java NIO è il mio argomento preferito. Lavoro con NIO dagli ultimi 2 anni e vorrei condividere un semplice Server-Client code per i miei lettori che sono liberi di usare questo codice nel loro ambiente di produzione.

A partire da JDK 1.4, NIO è stato creato per consentire a tutti i programmatori Java di implementare input/output ad altissima velocità senza dover gestire codice nativo personalizzato. NIO utilizza la libreria java.nio.buffer rispetto al semplice I/O che drena e riempie il buffer internamente qualsiasi sistema operativo.

In questo tutorial esamineremo le librerie java.nio.channels e java.nio.channels.Selector .

  • i channels rappresentano connessioni a entità in grado di eseguire operazioni di I/O, come file e socket; definisce i selettori , per operazioni di I/O multiplex non bloccanti.
  • selector può essere creato invocando il open method di questa classe, che utilizzerà il provider di selezione predefinito del sistema per creare un nuovo selettore.
Spiegazione del pacchetto java.nio con dettagli API

Se hai below questions di seguito, sei nel posto giusto:

  • Come iniziare con Java NIO
  • Che cosa sono i tutorial Java NIO e Java NIO
  • Java NIO asincrono
  • Qual è l'uso esatto del pacchetto java nio
  • Esercitazione Java NIO
  • Come implementare I/O ad alte prestazioni con Java NIO

Iniziamo:

Passo 1

  • Crea CrunchifyNIOServer.java che apre la connessione sulla port 1111
  • usa isAcceptable() per verificare se il canale è pronto per accettare una nuova connessione socket
    • Se sì, collegalo
  • usa isReadable() per verificare se il canale è pronto per la lettura
    • se sì – leggi dal buffer e stampa sulla console Eclipse
  • Una volta ottenuto il cognome dell'azienda, "crunchify"
    • stretta connessione

Passo 2

  • Crea CrunchifyNIOClient.java che tenta di connettersi al server sulla port 1111
  • Crea ArrayList con 5 nomi di società
  • Iterare attraverso ArrayList e inviare ogni companyName al server
  • Chiudere la connessione al termine dell'attività

Dai un'occhiata a questo codice Java:

Codice server – CrunchifyNIOServer.java


Codice cliente – CrunchifyNIOClient.java

Java NIO (I:O non bloccante) con esempio server-client - CrunchifyNIOClient.java

Risultato lato server:

Risultato lato cliente:


Poche domande frequenti:

  1. Dal client, come faccio a mantenere una connessione persistente?
    • Potresti usare socket.setKeepAlive(true); per avere connessioni attive dal lato client.
  2. Come leggo una risposta al messaggio che invio al server. Il server continua a generare messaggi ogni 10 sec. Ho solo bisogno di leggere la risposta alla mia richiesta. Da quanto ho capito, TCP "trasmette" i dati invece della fine del record, ecc.
    • Per la comunicazione client server, un protocollo deve essere ben definito. readLine() verrà bloccata fino a quando non verranno restituiti tutti i dati, quindi non usarlo. Try reading bytes from the stream until -1 is returned.

Fammi sapere se funziona.