Dalam pembangunan API Java, komunikasi TCP ialah komponen yang sangat penting, dan Netty5 ialah rangka kerja komunikasi rangkaian berprestasi tinggi berdasarkan NIO, yang boleh mengendalikan tugas komunikasi rangkaian yang kompleks dengan sangat mudah. Artikel ini akan memperkenalkan cara menggunakan Netty5 untuk komunikasi TCP, termasuk komponen teras Netty5, pengenalan kepada API biasa dan kes aplikasi praktikal. Pada masa yang sama, artikel ini juga akan memperkenalkan cara menggunakan Netty5 untuk meningkatkan prestasi dan kebolehpercayaan komunikasi TCP.
1. Komponen teras Netty5
Komponen teras Netty5 termasuk Channel, EventLoop, Codec, Handler dan Bootstrap. Antaranya, Saluran mewakili sambungan terbuka yang boleh membaca dan menulis data. EventLoop ialah kumpulan benang yang digunakan untuk mengendalikan semua acara dalam Netty5. Codec ialah satu set codec yang bertanggungjawab untuk menukar data daripada bytecode kepada objek, dan objek kepada bytecode. Pengendali ialah salah satu komponen terpenting dalam Netty5, bertanggungjawab untuk mengendalikan status sambungan, acara baca dan tulis serta acara pengecualian. Akhir sekali, Bootstrap ialah kelas utama yang digunakan dalam Netty5 untuk mengkonfigurasi, memulakan dan mengurus Netty.
2. Pengenalan kepada API yang biasa digunakan
ServerBootstrap serverBootstrap = new ServerBootstrap(); NioEventLoopGroup bossGroup = new NioEventLoopGroup(); NioEventLoopGroup workGroup = new NioEventLoopGroup(); serverBootstrap.group(bossGroup, workGroup) .channel(NioServerSocketChannel.class) .localAddress(new InetSocketAddress(port)) .childHandler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel socketChannel) { socketChannel.pipeline(). addLast(new CodecHandler(Encoding.getEncoding()),new TcpServerHandler()); } }); ChannelFuture f = serverBootstrap.bind().sync();
Bootstrap bootstrap = new Bootstrap(); bootstrap.group(new NioEventLoopGroup()) .channel(NioSocketChannel.class) .remoteAddress(new InetSocketAddress(ip, port)) .handler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new CodecHandler(Encoding.getEncoding()),new TcpClientHandler()); } }); ChannelFuture f = bootstrap.connect().sync();
public class TcpServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg){ //处理读事件 } @Override public void channelReadComplete(ChannelHandlerContext ctx){ ctx.flush(); } @Override public void exceptionCaught(ChannelHandlerContext ctx,Throwable cause){ //处理异常事件 } }
Kes aplikasi praktikal berikut
kes praktikal Untuk memperkenalkan cara menggunakan Netty5 untuk komunikasi TCP. Perihalan kes: Katakan terdapat sistem peperiksaan dalam talian yang perlu menggunakan protokol TCP untuk menyampaikan jawapan peperiksaan kepada pelayan.public class TcpClientHandler extends ChannelOutboundHandlerAdapter { @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) { //处理写事件 } @Override public void exceptionCaught(ChannelHandlerContext ctx,Throwable cause){ //处理异常事件 } }
public class ExamServer { public static void main(String[] args) throws InterruptedException { int port = 8080; if (args.length > 0){ port = Integer.parseInt(args[0]); } ServerBootstrap serverBootstrap = new ServerBootstrap(); NioEventLoopGroup bossGroup = new NioEventLoopGroup(); NioEventLoopGroup workGroup = new NioEventLoopGroup(); serverBootstrap.group(bossGroup, workGroup) .channel(NioServerSocketChannel.class) .localAddress(new InetSocketAddress(port)) .childHandler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel socketChannel) { socketChannel.pipeline() .addLast(new CodecHandler(Encoding.getEncoding()),new TcpServerHandler()); } }); ChannelFuture f = serverBootstrap.bind().sync(); //等待服务器监听端口关闭 f.channel().closeFuture().sync(); } }
public class ExamClient { public static void main(String[] args) throws InterruptedException { String host = "localhost"; int port = 8080; Bootstrap bootstrap = new Bootstrap(); bootstrap.group(new NioEventLoopGroup()) .channel(NioSocketChannel.class) .remoteAddress(new InetSocketAddress(host, port)) .handler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline() .addLast(new CodecHandler(Encoding.getEncoding()),new TcpClientHandler()); } }); ChannelFuture f = bootstrap.connect().sync(); //一直等到channel关闭 f.channel().closeFuture().sync(); } }rrree
Atas ialah kandungan terperinci Menggunakan Netty5 untuk komunikasi TCP dalam pembangunan API Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!