Rumah pembangunan bahagian belakang tutorial php Pembangunan backend Java: Gunakan Netty untuk membina pelayan API konkurensi tinggi

Pembangunan backend Java: Gunakan Netty untuk membina pelayan API konkurensi tinggi

Jun 17, 2023 am 10:23 AM
java netty pelayan api

Dengan pembangunan berterusan Internet dan pengembangan bidang aplikasi yang berterusan, konkurensi tinggi telah menjadi isu yang mesti dipertimbangkan dalam pembangunan aplikasi rangkaian Sebagai bahasa yang digunakan secara meluas dalam pembangunan aplikasi peringkat perusahaan, Java digunakan dalam tahap tinggi -Senario aplikasi concurrency Prestasi berikut menarik perhatian. Netty ialah rangka kerja rangkaian berprestasi tinggi yang dipacu peristiwa tak segerak yang telah digunakan secara meluas dalam bidang pembangunan back-end Java dalam beberapa tahun kebelakangan ini. Artikel ini akan memperkenalkan konsep asas dan penggunaan Netty, dan mengambil membina pelayan API serentak tinggi sebagai contoh untuk menunjukkan aplikasi Netty dalam projek sebenar.

1. Pengenalan kepada Netty

Netty ialah rangka kerja NIO berprestasi tinggi dan tak segerak yang disediakan oleh JBOSS. Ia mempunyai kelebihan prestasi tinggi, berskala, fleksibiliti, dan operasi yang mudah, dan digunakan secara meluas dalam pelbagai bidang, terutamanya dalam membina pelayan rangkaian berprestasi tinggi. Komponen teras Netty ialah Channel, EventLoop, ChannelFuture, dsb., di mana Saluran mewakili aliran data dwiarah, EventLoop bertanggungjawab untuk memproses peristiwa dalam aliran data (seperti sambungan, operasi baca dan tulis, dll.), dan ChannelFuture mewakili hasil operasi tak segerak.

Keseluruhan rangka kerja Netty adalah berdasarkan mod Reaktor, iaitu, apabila peristiwa berlaku pada Saluran, ia akan dimasukkan ke dalam EventLoop untuk pemprosesan tak segerak, dan kemudian dikembalikan kepada aplikasi selepas pemprosesan selesai. Pendekatan ini membolehkan Netty menyokong sejumlah besar permintaan serentak dan mengekalkan kelajuan tindak balas yang baik.

2. Aplikasi Netty

  1. Pelayan TCP

Dalam Netty, anda boleh membina pelayan TCP mudah melalui langkah berikut:

1) Buat contoh ServerBootstrap dan tetapkan parameter yang berkaitan, seperti port pendengaran, saiz kumpulan benang, dll.;

2) Ikat port dan mulakan perkhidmatan Pada masa ini, Saluran baharu akan dibuat dan Daftarkannya dalam EventLoop yang sepadan;

3) Tambahkan objek ChannelInitializer pada Saluran yang baru dibuat, yang bertanggungjawab untuk memproses logik pemprosesan peristiwa dalam Saluran.

Kod sampel adalah seperti berikut:

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();
}
Salin selepas log masuk
  1. Pelayan HTTP

Dalam Netty, anda juga boleh membina pelayan dengan mudah berdasarkan protokol HTTP. Perlu diingat bahawa apabila menggunakan Netty untuk pembangunan HTTP, codec yang berkaitan perlu ditambah untuk menyokong pertukaran data dengan protokol HTTP.

Kod sampel adalah seperti berikut:

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();
}
Salin selepas log masuk
  1. Pelayan WebSocket

WebSocket ialah protokol yang melaksanakan komunikasi dupleks penuh dan boleh digunakan terus antara pelayar dan berkomunikasi antara pelayan. Dalam Netty, anda juga boleh menggunakan protokol WebSocket untuk membina pelayan Contoh kod adalah seperti berikut:

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();
}
Salin selepas log masuk

3. Ciri lanjutan Netty

Sebagai tambahan kepada senario aplikasi asas di atas, Netty. juga menyediakan banyak ciri lanjutan , contohnya:

  1. Menyokong pelbagai protokol

Netty bukan sahaja menyokong protokol biasa seperti TCP, HTTP, WebSocket, tetapi juga menyokong pembangunan dan aplikasi pelbagai protokol tersuai;

  1. Codec sokongan

Codec yang disediakan oleh Netty boleh mengekod dan menyahkod data dengan mudah dalam format yang berbeza, seperti JSON, Protobuf, dsb.;

  1. Menyokong berbilang model IO

Netty menyokong pemilihan berbilang model IO, seperti NIO, Epoll, dsb.

  1. Sokongan pelbagai kaedah penghantaran

Netty menyokong pelbagai kaedah penghantaran, seperti menyekat, tidak menyekat, sambungan panjang, sambungan pendek, dll.

4. Aplikasi Netty dalam projek sebenar

Dalam projek sebenar, Netty sering digunakan untuk membina pelayan API konkurensi tinggi untuk mengendalikan sejumlah besar permintaan HTTP. Sebagai contoh, Netty boleh digunakan untuk membina pelayan berdasarkan gaya API RESTful untuk menyokong pendaftaran pengguna, log masuk, pertanyaan dan operasi lain Kod sampel adalah seperti berikut:

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();
}
Salin selepas log masuk

Pelaksanaan pelayan RestfulAPI memerlukan. takrifan pelbagai antara muka API, yang sepadan dengan Permintaan HTTP yang sepadan:

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) {
        // 从数据库中删除指定用户并返回结果
    }
}
Salin selepas log masuk

Antaranya, @GET, @POST, @PUT, @DELETE dan anotasi lain digunakan untuk mengenal pasti kaedah permintaan yang sepadan, dan @ Anotasi PathParam dan @RequestBody digunakan untuk mewakili parameter laluan dan kandungan badan Minta.

Melalui fleksibiliti Netty dan mekanisme dipacu peristiwa yang berkuasa, pemprosesan yang sangat cekap boleh dicapai untuk memenuhi keperluan serentak yang tinggi.

5. Ringkasan

Netty ialah rangka kerja aplikasi rangkaian yang sangat baik dalam pembangunan back-end Java. Ia mempunyai kelebihan prestasi tinggi, berskala, fleksibiliti dan operasi yang mudah untuk membina aplikasi konkurensi tinggi dengan prestasi cemerlang dalam pelayan API. Melalui pengenalan artikel ini, anda boleh memahami konsep asas dan penggunaan Netty, dan juga memahami aplikasi Netty dalam projek sebenar. Saya berharap pembaca dapat menguasai kaedah pembangunan Netty, menggunakan rangka kerja ini dalam pembangunan sebenar, dan membuat lebih banyak sumbangan kepada pembangunan aplikasi rangkaian yang berprestasi tinggi dan cekap.

Atas ialah kandungan terperinci Pembangunan backend Java: Gunakan Netty untuk membina pelayan API konkurensi tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Program Java untuk mencari kelantangan kapsul Program Java untuk mencari kelantangan kapsul Feb 07, 2025 am 11:37 AM

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4

See all articles