From 96b9935b08a88e1cb05af6c5c383cbacf39d90f2 Mon Sep 17 00:00:00 2001 From: bunny <1319900154@qq.com> Date: Thu, 23 May 2024 16:55:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=96=B0=E5=A2=9E):=20:rocket:=20?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=87=BA=E6=A0=88=E5=85=A5=E6=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/bunny/demo6/TestEmbedded.java | 47 +++++++++++++ .../java/cn/bunny/demo6/TestNettyPromise.java | 35 ++++++++++ .../java/cn/bunny/demo6/TestPipelineDemo.java | 67 +++++++++++++++++++ 3 files changed, 149 insertions(+) create mode 100644 netty/service/src/test/java/cn/bunny/demo6/TestEmbedded.java create mode 100644 netty/service/src/test/java/cn/bunny/demo6/TestNettyPromise.java create mode 100644 netty/service/src/test/java/cn/bunny/demo6/TestPipelineDemo.java diff --git a/netty/service/src/test/java/cn/bunny/demo6/TestEmbedded.java b/netty/service/src/test/java/cn/bunny/demo6/TestEmbedded.java new file mode 100644 index 0000000..8ebde6b --- /dev/null +++ b/netty/service/src/test/java/cn/bunny/demo6/TestEmbedded.java @@ -0,0 +1,47 @@ +package cn.bunny.demo6; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; +import io.netty.channel.embedded.EmbeddedChannel; + +public class TestEmbedded { + public static void main(String[] args) { + ChannelInboundHandlerAdapter h1 = new ChannelInboundHandlerAdapter() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) { + System.out.println(1); + ctx.fireChannelRead(msg); // 1 + } + }; + ChannelInboundHandlerAdapter h2 = new ChannelInboundHandlerAdapter() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) { + System.out.println(2); + ctx.channel().write(msg); // 2 + } + }; + + ChannelOutboundHandlerAdapter h3 = new ChannelOutboundHandlerAdapter() { + @Override + public void write(ChannelHandlerContext ctx, Object msg, + ChannelPromise promise) { + System.out.println(4); + ctx.write(msg, promise); // 3 + } + }; + + ChannelOutboundHandlerAdapter h4 = new ChannelOutboundHandlerAdapter() { + @Override + public void write(ChannelHandlerContext ctx, Object msg, + ChannelPromise promise) { + System.out.println(5); + ctx.write(msg, promise); // 4 + } + }; + EmbeddedChannel channel = new EmbeddedChannel(h1, h2, h3, h4); + channel.writeInbound(ByteBufAllocator.DEFAULT.buffer().writeBytes("hello world".getBytes())); + } +} diff --git a/netty/service/src/test/java/cn/bunny/demo6/TestNettyPromise.java b/netty/service/src/test/java/cn/bunny/demo6/TestNettyPromise.java new file mode 100644 index 0000000..ecd1b31 --- /dev/null +++ b/netty/service/src/test/java/cn/bunny/demo6/TestNettyPromise.java @@ -0,0 +1,35 @@ +package cn.bunny.demo6; + +import io.netty.channel.EventLoop; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.util.concurrent.DefaultPromise; +import io.netty.util.concurrent.Promise; +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.ExecutionException; + +@Slf4j +public class TestNettyPromise { + public static void main(String[] args) throws ExecutionException, InterruptedException { + // 准备EventLoop 对象 + EventLoop eventLoop = new NioEventLoopGroup().next(); + // 可以创建promise 结果容器 + Promise promise = new DefaultPromise<>(eventLoop); + + new Thread(() -> { + // 任意线程进行计算 + System.out.println("开始计算..."); + // 计算完成后向promise填充结果 + try { + Thread.sleep(1000); + } catch (InterruptedException exception) { + exception.printStackTrace(); + } + + promise.setSuccess(80); + }).start(); + // 除了可以等待结果,也可以处理异常 + log.debug("等待结果..."); + log.debug("结果是:{}", promise.get()); + } +} diff --git a/netty/service/src/test/java/cn/bunny/demo6/TestPipelineDemo.java b/netty/service/src/test/java/cn/bunny/demo6/TestPipelineDemo.java new file mode 100644 index 0000000..662e7c6 --- /dev/null +++ b/netty/service/src/test/java/cn/bunny/demo6/TestPipelineDemo.java @@ -0,0 +1,67 @@ +package cn.bunny.demo6; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.*; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class TestPipelineDemo { + public static void main(String[] args) { + new ServerBootstrap() + .group(new NioEventLoopGroup()) + .channel(NioServerSocketChannel.class) + .childHandler(new ChannelInitializer() { + protected void initChannel(NioSocketChannel ch) { + ch.pipeline().addLast(new ChannelInboundHandlerAdapter() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) { + System.out.println(1); + ctx.fireChannelRead(msg); // 1 + } + }); + ch.pipeline().addLast(new ChannelInboundHandlerAdapter() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) { + System.out.println(2); + ctx.fireChannelRead(msg); // 2 + } + }); + ch.pipeline().addLast(new ChannelInboundHandlerAdapter() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) { + System.out.println(3); + ctx.channel().write(msg); // 3 + } + }); + ch.pipeline().addLast(new ChannelOutboundHandlerAdapter() { + @Override + public void write(ChannelHandlerContext ctx, Object msg, + ChannelPromise promise) { + System.out.println(4); + ctx.write(msg, promise); // 4 + } + }); + ch.pipeline().addLast(new ChannelOutboundHandlerAdapter() { + @Override + public void write(ChannelHandlerContext ctx, Object msg, + ChannelPromise promise) { + System.out.println(5); + ctx.write(msg, promise); // 5 + } + }); + ch.pipeline().addLast(new ChannelOutboundHandlerAdapter() { + @Override + public void write(ChannelHandlerContext ctx, Object msg, + ChannelPromise promise) { + System.out.println(6); + ctx.write(msg, promise); // 6 + } + }); + } + }) + .bind(8080); + } +}