Maison développement back-end tutoriel php Développement back-end Java : utilisez Netty pour créer un serveur API à haute concurrence

Développement back-end Java : utilisez Netty pour créer un serveur API à haute concurrence

Jun 17, 2023 am 10:23 AM
java netty api服务器

Avec le développement continu d'Internet et l'expansion continue des domaines d'application, la simultanéité élevée est devenue un problème qui doit être pris en compte dans le développement d'applications réseau. En tant que langage largement utilisé dans le développement d'applications au niveau de l'entreprise, Java est particulièrement important. dans les applications à haute concurrence. Les performances dans la scène ont attiré beaucoup d'attention. Netty est un framework d'application réseau asynchrone hautes performances, piloté par événements, largement utilisé dans le domaine du développement back-end Java ces dernières années. Cet article présentera les concepts de base et l'utilisation de Netty, et prendra la création d'un serveur API à haute concurrence comme exemple pour démontrer l'application de Netty dans des projets réels.

1. Introduction à Netty

Netty est un framework NIO open source, hautes performances et asynchrone piloté par événements fourni par JBOSS. Il présente les avantages de hautes performances, d'évolutivité, de flexibilité et de facilité d'utilisation, et est largement utilisé dans divers domaines, en particulier dans la construction de serveurs réseau hautes performances. Les composants principaux de Netty sont Channel, EventLoop, ChannelFuture, etc., où Channel représente un flux de données bidirectionnel, EventLoop est responsable du traitement des événements dans le flux de données (tels que les connexions, les opérations de lecture et d'écriture, etc.) et ChannelFuture représente un résultat d’opération asynchrone.

L'ensemble du framework Netty est basé sur le modèle Reactor, c'est-à-dire que lorsqu'un événement se produit sur un canal, il sera placé dans EventLoop pour un traitement asynchrone, puis renvoyé à l'application une fois le traitement terminé. . Cette approche permet à Netty de prendre en charge un grand nombre de requêtes simultanées et de maintenir une bonne vitesse de réponse.

2. Application Netty

  1. Serveur TCP

Dans Netty, vous pouvez créer un simple serveur TCP : # 🎜🎜#

1) Créez une instance ServerBootstrap et définissez les paramètres pertinents, tels que le port d'écoute, la taille du pool de threads, etc. ;

2) Liez le port et démarrez le service. À ce moment-là, un nouveau canal sera créé et enregistré dans l'EventLoop correspondant ;

3) Ajoutez un objet ChannelInitializer au canal nouvellement créé, qui est responsable du traitement de la logique de traitement des événements dans le canal.

L'exemple de code est le suivant :

EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
    ServerBootstrap serverBootstrap = new ServerBootstrap();
    serverBootstrap.group(bossGroup, workerGroup)
                   .channel(NioServerSocketChannel.class)
                   .childHandler(new ChannelInitializer<SocketChannel>() {
                       @Override
                       public void initChannel(SocketChannel ch) throws Exception {
                           ChannelPipeline pipeline = ch.pipeline();
                           pipeline.addLast(new EchoServerHandler());
                       }
                   });
    ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
    channelFuture.channel().closeFuture().sync();
} finally {
    workerGroup.shutdownGracefully();
    bossGroup.shutdownGracefully();
}
Copier après la connexion

    Serveur HTTP
Dans Netty, vous pouvez également facilement créer un serveur basé sur le protocole HTTP. Il convient de noter que lorsque vous utilisez Netty pour le développement HTTP, vous devez ajouter les codecs pertinents pour prendre en charge l'échange de données avec le protocole HTTP.

L'exemple de code est le suivant :

EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
    ServerBootstrap serverBootstrap = new ServerBootstrap();
    serverBootstrap.group(bossGroup, workerGroup)
                   .channel(NioServerSocketChannel.class)
                   .childHandler(new ChannelInitializer<SocketChannel>() {
                       @Override
                       public void initChannel(SocketChannel ch) throws Exception {
                           ChannelPipeline pipeline = ch.pipeline();
                           // 添加HTTP请求解码器
                           pipeline.addLast(new HttpServerCodec());
                           // 添加HTTP请求内容聚合器(主要是将HTTP消息聚合成FullHttpRequest或FullHttpResponse)
                           pipeline.addLast(new HttpObjectAggregator(64 * 1024));
                           // 添加自定义的请求处理器
                           pipeline.addLast(new HttpServerHandler());
                       }
                   });
    ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
    channelFuture.channel().closeFuture().sync();
} finally {
    workerGroup.shutdownGracefully();
    bossGroup.shutdownGracefully();
}
Copier après la connexion

    WebSocket server
WebSocket est une sorte de full-duplex communication. Protocole qui permet une communication directe entre les navigateurs et les serveurs. Dans Netty, vous pouvez également utiliser le protocole WebSocket pour créer un serveur. L'exemple de code est le suivant :

EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
    ServerBootstrap serverBootstrap = new ServerBootstrap();
    serverBootstrap.group(bossGroup, workerGroup)
                   .channel(NioServerSocketChannel.class)
                   .childHandler(new ChannelInitializer<SocketChannel>() {
                       @Override
                       public void initChannel(SocketChannel ch) throws Exception {
                           ChannelPipeline pipeline = ch.pipeline();
                           // 添加HTTP请求解码器
                           pipeline.addLast(new HttpServerCodec());
                           // 添加HTTP请求内容聚合器
                           pipeline.addLast(new HttpObjectAggregator(64 * 1024));
                           // 添加WebSocket协议处理器
                           pipeline.addLast(new WebSocketServerProtocolHandler("/websocket"));
                           // 添加自定义的请求处理器
                           pipeline.addLast(new WebSocketServerHandler());
                       }
                   });
    ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
    channelFuture.channel().closeFuture().sync();
} finally {
    workerGroup.shutdownGracefully();
    bossGroup.shutdownGracefully();
}
Copier après la connexion

3. Les fonctionnalités avancées de Netty

En plus des fonctionnalités de base ci-dessus. scénarios d'application, Netty fournit également de nombreuses fonctionnalités avancées, telles que : TCP, HTTP, WebSocket, etc. Développement et application de divers protocoles personnalisés ;

    Supporte les codecs
Les codecs fournis par Netty peuvent facilement prendre en charge différents formats Encoder et décoder des données, telles que JSON, Protobuf, etc. Modèles IO, par exemple NIO, Epoll, etc. , connexion non bloquante et longue, connexion courte, etc.

4. Application de Netty dans des projets réels
  1. Dans les projets réels, Netty est souvent utilisé pour créer des serveurs API à haute concurrence pour gérer un grand nombre de requêtes HTTP. Par exemple, vous pouvez utiliser Netty pour créer un serveur basé sur le style API RESTful pour prendre en charge l'enregistrement des utilisateurs, la connexion, les requêtes et d'autres opérations. L'exemple de code est le suivant :
  2. EventLoopGroup bossGroup = new NioEventLoopGroup();
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    try {
        ServerBootstrap serverBootstrap = new ServerBootstrap();
        serverBootstrap.group(bossGroup, workerGroup)
                       .channel(NioServerSocketChannel.class)
                       .childHandler(new ChannelInitializer<SocketChannel>() {
                           @Override
                           public void initChannel(SocketChannel ch) throws Exception {
                               ChannelPipeline pipeline = ch.pipeline();
                               // 添加HTTP请求解码器
                               pipeline.addLast(new HttpServerCodec());
                               // 添加HTTP请求内容聚合器
                               pipeline.addLast(new HttpObjectAggregator(64 * 1024));
                               // 添加自定义的请求处理器
                               pipeline.addLast(new RestfulServerHandler());
                           }
                       });
        ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
        channelFuture.channel().closeFuture().sync();
    } finally {
        workerGroup.shutdownGracefully();
        bossGroup.shutdownGracefully();
    }
    Copier après la connexion
L'implémentation de RestfulAPI. Le serveur nécessite de définir diverses interfaces API. L'interface correspond à la requête HTTP correspondante :

public class UserController {
    @GET("/user/{id}")
    public String getUserById(@PathParam("id") int id) {
        // 查询数据库并返回结果
    }

    @POST("/user")
    public String createUser(@RequestBody User user) {
        // 向数据库中插入新用户并返回结果
    }

    @PUT("/user/{id}")
    public String updateUser(@PathParam("id") int id, @RequestBody User user) {
        // 更新数据库中指定用户的信息并返回结果
    }

    @DELETE("/user/{id}")
    public String deleteUser(@PathParam("id") int id) {
        // 从数据库中删除指定用户并返回结果
    }
}
Copier après la connexion

Parmi elles, @GET, @POST, @PUT, @DELETE et d'autres annotations sont utilisées pour identifier la méthode de requête correspondante. , et les annotations @PathParam et @RequestBody sont utilisées pour indiquer la requête. Les paramètres du chemin et le contenu du corps de la requête.
  1. Grâce à la flexibilité de Netty et à son puissant mécanisme basé sur les événements, un traitement très efficace peut être obtenu pour répondre aux exigences élevées de concurrence.
5. Résumé

Netty est un très excellent framework d'application réseau dans le développement back-end Java. Il présente les avantages de hautes performances, d'évolutivité, de flexibilité et de simplicité d'utilisation. Performances exceptionnelles dans la création de serveurs API à haute concurrence. Grâce à l'introduction de cet article, vous pouvez comprendre les concepts de base et l'utilisation de Netty, ainsi que l'application de Netty dans des projets réels. J'espère que les lecteurs pourront maîtriser les méthodes de développement de Netty, appliquer ce cadre dans le développement réel et apporter davantage de contributions au développement performant et efficace des applications réseau.

    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

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    AI Hentai Generator

    AI Hentai Generator

    Générez AI Hentai gratuitement.

    Article chaud

    R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
    1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Meilleurs paramètres graphiques
    1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Comment réparer l'audio si vous n'entendez personne
    1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Commandes de chat et comment les utiliser
    1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

    Outils chauds

    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)

    Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

    Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

    Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

    Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

    Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

    Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

    Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

    Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

    Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

    Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

    Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

    Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

    Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

    Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

    Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

    Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

    See all articles