Java NIO (E/S non bloquantes) avec exemple serveur-client – ​​java.nio.ByteBuffer et channels.Selector – Java NIO Vs. IO

Publié: 2021-08-06
Java NIO (I:O non bloquant) avec exemple serveur-client - CrunchifyNIOServer.java

Java NIO est mon sujet préféré. Je travaille avec NIO depuis 2 ans et j'aimerais partager un Server-Client code simple pour mes lecteurs qui sont libres d'utiliser ce code dans leur environnement de production.

À partir de JDK 1.4, NIO a été créé pour permettre à tous les programmeurs Java d'implémenter des entrées/sorties très rapides sans avoir à gérer de code natif personnalisé. NIO utilise la bibliothèque java.nio.buffer comparée à de simples E/S qui drainent et remplissent le tampon en interne de tout système d'exploitation.

Dans ce didacticiel, nous allons passer en revue les bibliothèques java.nio.channels et java.nio.channels.Selector .

  • channels représentent des connexions à des entités capables d'effectuer des opérations d'E/S, telles que des fichiers et des sockets ; définit les sélecteurs , pour les opérations d'E/S multiplexées et non bloquantes.
  • selector peut être créé en invoquant la open method de cette classe, qui utilisera le fournisseur de sélecteurs par défaut du système pour créer un nouveau sélecteur.
Explication du package java.nio avec les détails de l'API

Si vous avez des below questions -dessous, vous êtes au bon endroit :

  • Comment démarrer avec Java NIO
  • Qu'est-ce que Java NIO et les tutoriels Java NIO
  • Java NIO asynchrone
  • Quelle est l'utilisation exacte du package java nio
  • Tutoriel Java NIO
  • Comment implémenter des E/S hautes performances avec Java NIO

Commençons:

Étape 1

  • Créez CrunchifyNIOServer.java qui ouvre la connexion sur le port 1111
  • utilisez isAcceptable() pour vérifier si le canal est prêt à accepter une nouvelle connexion socket
    • Si oui - connectez-le
  • utilisez isReadable() pour vérifier si le canal est prêt pour la lecture
    • si oui - lire à partir du tampon et imprimer sur la console Eclipse
  • Une fois que vous obtenez le nom de l'entreprise "crunchify"
    • fermer la connexion

Étape 2

  • Créez CrunchifyNIOClient.java qui tente de se connecter au serveur sur le port 1111
  • Créer une ArrayList avec 5 noms d'entreprise
  • Parcourez ArrayList et envoyez chaque companyName au serveur
  • Fermer la connexion après la fin de la tâche

Jetez un oeil à ce code Java :

Code serveur – CrunchifyNIOServer.java


Code client – ​​CrunchifyNIOClient.java

Java NIO (I:O non bloquant) avec exemple serveur-client - CrunchifyNIOClient.java

Résultat côté serveur :

Résultat côté client :


Quelques FAQ :

  1. À partir du client, comment puis-je maintenir une connexion persistante ?
    • Vous pouvez utiliser socket.setKeepAlive(true); pour avoir des connexions actives du côté client.
  2. Comment puis-je lire une réponse au message que j'envoie au serveur. Le serveur continue de générer des messages toutes les 10 secondes. J'ai juste besoin de lire la réponse à ma demande. D'après ce que j'ai compris, TCP "transmet" les données au lieu de la fin de l'enregistrement, etc.
    • Pour la communication client-serveur, un protocole doit être bien défini. L'appel readLine() sera bloqué jusqu'à ce que toutes les données soient renvoyées, ne l'utilisez donc pas. Try reading bytes from the stream until -1 is returned.

Faites-moi savoir si cela fonctionne.