Java NIO (Non-blocking I/O) mit Server-Client-Beispiel – java.nio.ByteBuffer und channels.Selector – Java NIO Vs. IO

Veröffentlicht: 2021-08-06
Java NIO (Non-blocking I:O) mit Server-Client-Beispiel – CrunchifyNIOServer.java

Java NIO ist mein Lieblingsthema. Ich arbeite seit den letzten 2 Jahren mit NIO und würde gerne einfachen Server-Client code für meine Leser freigeben, die diesen Code in ihrer Produktionsumgebung verwenden können.

Ab JDK 1.4 wurde NIO entwickelt, um allen Java-Programmierern die Implementierung von Eingabe/Ausgabe mit sehr hoher Geschwindigkeit zu ermöglichen, ohne sich mit benutzerdefiniertem nativen Code befassen zu müssen. NIO verwendet die java.nio.buffer Bibliothek im Vergleich zu einfachen E/A-Vorgängen, die den Puffer intern in jedem Betriebssystem leeren und auffüllen.

In diesem Tutorial gehen wir auf die Bibliotheken java.nio.channels und java.nio.channels.Selector .

  • channels stellen Verbindungen zu Entitäten dar, die E/A-Operationen ausführen können, wie Dateien und Sockets; definiert Selektoren für gemultiplexte, nicht blockierende E/A-Operationen.
  • selector kann durch Aufrufen der open method dieser Klasse erstellt werden, die den standardmäßigen Selektoranbieter des Systems verwendet, um einen neuen Selektor zu erstellen.
Java.nio-Paketerklärung mit API-Details

Wenn Sie folgende below questions haben, dann sind Sie hier richtig:

  • Erste Schritte mit Java NIO
  • Was ist Java NIO und Java NIO-Tutorials
  • Asynchrones Java-NIO
  • Was ist die genaue Verwendung des Java Nio-Pakets
  • Java-NIO-Tutorial
  • So implementieren Sie High-Performance I/O mit Java NIO

Lass uns anfangen:

Schritt 1

  • Erstellen Sie CrunchifyNIOServer.java , das die Verbindung auf port 1111 öffnet
  • Verwenden isAcceptable() , um zu prüfen, ob der Kanal bereit ist, eine neue Socket-Verbindung zu akzeptieren
    • Wenn ja – anschließen
  • Verwenden isReadable() , um zu prüfen, ob der Kanal zum Lesen bereit ist
    • wenn ja – aus dem Puffer lesen und auf der Eclipse-Konsole drucken
  • Sobald Sie den letzten Firmennamen erhalten, „crunchify“
    • Verbindung schließen

Schritt 2

  • Erstellen Sie CrunchifyNIOClient.java , das versucht, eine Verbindung zum Server auf port 1111 herzustellen
  • Erstellen Sie eine ArrayList mit 5 Firmennamen
  • Durchlaufen Sie ArrayList und senden Sie jeden Firmennamen an den Server
  • Verbindung nach Abschluss der Aufgabe schließen

Schauen Sie sich diesen Java-Code an:

Servercode – CrunchifyNIOServer.java


Client-Code – CrunchifyNIOClient.java

Java NIO (Non-blocking I:O) mit Server-Client-Beispiel – CrunchifyNIOClient.java

Ergebnis auf Serverseite:

Ergebnis auf Clientseite:


Einige häufig gestellte Fragen:

  1. Wie halte ich vom Client aus eine dauerhafte Verbindung aufrecht?
    • Sie könnten socket.setKeepAlive(true); um Verbindungen von der Clientseite am Leben zu haben.
  2. Wie lese ich eine Antwort auf die Nachricht, die ich an den Server sende? Der Server generiert weiterhin alle 10 Sekunden Nachrichten. Ich muss nur die Antwort auf meine Anfrage lesen. Soweit ich weiß, "streamt" TCP Daten anstelle des Datensatzendes usw.
    • Für die Client-Server-Kommunikation muss ein Protokoll gut definiert sein. readLine() Aufruf wird blockiert, bis alle Daten zurückgegeben wurden, verwenden Sie ihn also nicht. Try reading bytes from the stream until -1 is returned.

Lass mich wissen, ob das funktioniert.