Maison >Java >JavaBase >Modèle de réacteur Java Reactor

Modèle de réacteur Java Reactor

Guanhui
Guanhuiavant
2020-06-24 18:09:432100parcourir

Modèle de réacteur Java Reactor

Modèle de réacteur

Jusqu'à présent, la programmation réseau haute performance ne peut pas éviter les réactions du mode appareil. De nombreux logiciels serveur ou middleware célèbres sont implémentés sur la base du mode réacteur, tels que Nginx, Redis et Netty.

Le modèle de réacteur est un modèle incontournable et incontournable pour la programmation réseau haute performance.

Introduction à Reactor

Le mode réacteur se compose de deux rôles principaux : le thread du réacteur Reactor et le processeur Handlers :

(1) Reactor Responsabilités du thread du réacteur : Responsable de répondre aux événements IO et de les distribuer aux processeurs Handlers.

(2) Responsabilités du processeur Handlers : exécution non bloquante de la logique de traitement métier.

D’après la définition ci-dessus du modèle de réacteur, nous ne voyons rien de magique dans ce modèle. Bien entendu, il existe de nombreuses versions du modèle de réacteur, du plus simple au plus complexe. Selon la définition précédente, il ne s’agit que de la version la plus simple.

Défaut fatal de l'OIO multithread

Dans la programmation OIO de Java, le premier et le plus primitif programme de serveur réseau utilise une boucle while pour surveiller en permanence le port pour de nouvelles connexions. Si tel est le cas, appelez une fonction de traitement pour le compléter. L'exemple de code est le suivant :

@Test
 public void client() throws IOException {
   Socket client = new Socket("127.0.0.1", 9999);
   Writer writer = new OutputStreamWriter(client.getOutputStream());
   writer.write("Hello World");
   writer.flush();
   writer.close();
   client.close();
 }
 
 @Test
 public void server() throws IOException {
   ServerSocket server = new ServerSocket(9999);
   while (true){
     Socket socket = server.accept();
     Reader reader = new InputStreamReader(socket.getInputStream());
     print(reader);
     reader.close();
     socket.close();
     server.close();
   }
 }

Le plus gros problème avec cette méthode est : si le handle (socket) de la connexion réseau précédente n'a pas été traité, alors la demande de connexion ultérieure Il ne peut pas être reçu, donc toutes les demandes ultérieures seront bloquées et le débit du serveur sera trop faible. Pour les serveurs, c'est un problème sérieux.

Tutoriel recommandé : "Java"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer