Maison Java javaDidacticiel Exemple de code sur le processus de travail spécifique de Nio

Exemple de code sur le processus de travail spécifique de Nio

Jul 03, 2017 am 11:20 AM
工作 方式 经典

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

 public void selector() throws IOException { 2     

 ByteBuffer buffer = ByteBuffer.allocate(1024); 3     

 Selector selector = Selector.open(); 4     

 ServerSocketChannel ssc = ServerSocketChannel.open(); 5     

 ssc.configureBlocking(false);//设置为非阻塞模式 6     

 ssc.socket().bind(new InetSocketAddress(8080)); 7     

 ssc.register(selector, SelectionKey.OP_ACCEPT);//注册监听事件 8     

 while(true) { 9         Set selectorKeys = selector.selectorKeys();

 //取得所有key的集合10         Iterator it = selectorKeys.iterator();11         

 while(it.hasNext()) { //检查序列是否还有元素12             

 SelectionKey key = (SelectionKey) it.next();13             

 if((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) {14                 

 ServerSocketChannel ssChannel = (ServerSocketChannel) key.channel();15                 

 SocketChannel sc = ssChannel.accept();//接受到服务端的请求16                 

 sc.configureBlocking(false);17                 

 sc.register(selector,SelectionKey.OP_ACCEPT);18                 

 it.remove();19             } 

 else if((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) {20                 

 SocketChannel sc = (SocketChannel) key.channel;21                 

 while(true) {22                     buffer.clear();23                     

 int n = sc.read(buffer);//读取数据24                     

 if(n <= 0) {25                         

 break;26                     }                     

 buffer.flip();28                 }                

 it.remove();30             }    

 }

 }

 }

Copier après la connexion

  Le code ci-dessus est un exemple de code tiré du livre sur le processus de travail spécifique de Nio. Son processus de fonctionnement peut être décrit en détail comme suit :

Il existe deux classes clés : Canal et sélecteur , ce sont des concepts fondamentaux dans NIO. Le canal peut être comparé à un moyen de transport, et il s'agit d'un moyen de transport spécifique, comme les voitures et les vélos. Le Selector peut être comparé à un système de répartition de véhicules, chargé de surveiller les conditions de fonctionnement des véhicules et les travaux de répartition spécifiques.

La classe serverSocketChannel est un canal optionnel pour les sockets d'écoute orientées flux. Après avoir créé une telle instance côté serveur, utilisez la méthode Socket() (récupérez les informations associées à ce canal). Server Socket) renvoie une instance de la classe ServerSocket et utilise la méthode void bind(SocketAddress endpoint) de cette instance pour lier ServerSocket à une adresse spécifique (adresse IP et numéro de port). Tout comme chaque taxi d'une compagnie de taxi doit être enregistré auprès de l'entreprise, nous devons également enregistrer l'instance ServerSocketChannel auprès du sélecteur spécifié via la méthode register().

Appelez ensuite la méthode selectedKeys de Selector pour vérifier si tous les canaux de communication enregistrés sur ce sélecteur ont les événements requis. Si un événement se produit, tous les événements seront renvoyés SelectionKey, depuis la clé. .readyOps() obtient l'ensemble d'opérations prêt de cette clé, je pense personnellement que key.readyOps()&SelectionKey.OP_ACCEPT signifie que l'ensemble d'opérations prêt de cette clé est dans l'état ACCEPT, c'est-à-dire le Le serveur est dans l'état d'écoute, l'objet canal de communication peut être obtenu via la méthode Channel de cet objet, puis la méthode accept() est appelée pour renvoyer un canal socket, qui est par défaut dans un état de blocage. Vous pouvez également utiliser la communication. objet canal obtenu par la méthode Channel pour lire les données de communication, et Les données lues ici sont Buffer, et ce Buffer est un tampon que nous pouvons contrôler.


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 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

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Analyse des responsabilités de l'ingénieur front-end : quel est le travail principal ? Analyse des responsabilités de l'ingénieur front-end : quel est le travail principal ? Mar 25, 2024 pm 05:09 PM

Analyse des responsabilités de l'ingénieur front-end : quel est le travail principal ?

À quels emplois puis-je postuler en 2023 avec mes compétences Java ? À quels emplois puis-je postuler en 2023 avec mes compétences Java ? Sep 21, 2023 am 11:41 AM

À quels emplois puis-je postuler en 2023 avec mes compétences Java ?

ChatGPT et d'autres ne prendront pas en charge le travail humain de si tôt. Ils sont sujets aux erreurs et l'IA ne fonctionnera pas gratuitement. ChatGPT et d'autres ne prendront pas en charge le travail humain de si tôt. Ils sont sujets aux erreurs et l'IA ne fonctionnera pas gratuitement. May 21, 2023 am 08:49 AM

ChatGPT et d'autres ne prendront pas en charge le travail humain de si tôt. Ils sont sujets aux erreurs et l'IA ne fonctionnera pas gratuitement.

Quel genre de travail pouvez-vous obtenir en apprenant Java ? Quel genre de travail pouvez-vous obtenir en apprenant Java ? Jan 16, 2024 pm 05:18 PM

Quel genre de travail pouvez-vous obtenir en apprenant Java ?

Quels emplois pouvez-vous obtenir en apprenant Java ? Quels emplois pouvez-vous obtenir en apprenant Java ? Jan 16, 2024 pm 04:58 PM

Quels emplois pouvez-vous obtenir en apprenant Java ?

Quelles sont les méthodes de traitement du temps en langage Go ? Quelles sont les méthodes de traitement du temps en langage Go ? Jun 10, 2023 pm 09:42 PM

Quelles sont les méthodes de traitement du temps en langage Go ?

Quel type de travail puis-je effectuer à l'avenir en utilisant le langage C ? Quel type de travail puis-je effectuer à l'avenir en utilisant le langage C ? Jan 29, 2024 pm 02:47 PM

Quel type de travail puis-je effectuer à l'avenir en utilisant le langage C ?

Comment fonctionne le cache Hibernate de deuxième niveau ? Comment fonctionne le cache Hibernate de deuxième niveau ? Sep 14, 2023 pm 07:45 PM

Comment fonctionne le cache Hibernate de deuxième niveau ?

See all articles