Maison > Java > JavaBase > le corps du texte

Modèle de réacteur Java Reactor

Guanhui
Libérer: 2020-06-24 18:09:43
avant
2047 Les gens l'ont consulté

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();
   }
 }
Copier après la connexion

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!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!