La technologie NIO implémentée dans les fonctions Java permet aux applications de gérer efficacement les opérations d'E/S sans bloquer d'autres threads. Il exploite : Canaux non bloquants (NioSocketChannel et NioServerSocketChannel) Sélecteur pour surveiller l'état du canal Le côté serveur écoute les connexions entrantes et crée de nouveaux canaux Les clients se connectent au serveur et envoient des requêtes Les avantages incluent une réactivité élevée, une isolation des threads et une évolutivité
Technologie NIO implémentée dans les fonctions Java
Vue d'ensemble
La technologie NIO (Non-blocking I/O) est une technologie d'E/S asynchrone qui permet aux applications de fonctionner sans bloquer d'autres threads Interagir avec le réseau et des dossiers. L'implémentation de NIO dans les fonctions Java peut améliorer les performances et la réactivité d'E/S de votre application.
Cas pratique
Utilisation de NioServerSocketChannel et NioSocketChannel
NIO côté serveur utilise NioServerSocketChannel
侦听传入连接,并使用 NioSocketChannel
为每个连接创建一个新的通道。客户端使用 NioSocketChannel
pour se connecter au serveur.
// 服务器端 ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.bind(new InetSocketAddress(PORT)); while (true) { SocketChannel socketChannel = serverSocketChannel.accept(); ... // 处理请求 } // 客户端 SocketChannel socketChannel = SocketChannel.open(); socketChannel.connect(new InetSocketAddress(HOST, PORT)); ... // 发送请求
Utiliser le sélecteur
Le sélecteur est utilisé pour surveiller l'état de plusieurs canaux. Le sélecteur avertit l'application lorsqu'un ou plusieurs canaux sont lisibles, inscriptibles ou connectés.
// 初始化 selector Selector selector = Selector.open(); // 注册服务器端 channel 到 selector serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); // 循环监听事件 while (true) { // 阻塞直到一个或多个通道就绪 int readyChannels = selector.select(); if (readyChannels > 0) { Set<SelectionKey> selectedKeys = selector.selectedKeys(); for (SelectionKey key : selectedKeys) { if (key.isAcceptable()) { // 处理传入连接 } else if (key.isReadable()) { // 处理可读数据 } else if (key.isWritable()) { // 处理可写数据 } } selectedKeys.clear(); } }
Avantages
Limitations
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!