2021-10-21 EmbeddedChannelTest

一、说明:

EmbeddedChannel:  把netty中的 EmbeddedChannel  当作链式调用。

二、代码:

package netty;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.embedded.EmbeddedChannel;
import io.netty.util.internal.logging.InternalLogger;
import io.netty.util.internal.logging.InternalLoggerFactory;

public class EmbeddedChannelTest {

    public static void main(String[] args) {
        EmbeddedChannelDemo demo = new EmbeddedChannelDemo();
        demo.execDemo();
    }

}

class EmbeddedChannelDemo {

    private final EmbeddedChannel channel = new EmbeddedChannel();

    private final ByteBuf byteBuf = ByteBufAllocator.DEFAULT.heapBuffer(8);

    private final byte[] defaultBytes = "12345678".getBytes();

    public void execDemo() {

        channel.pipeline().addLast(new CreateMessageHandler());
        channel.pipeline().addLast(new HandMessageHandler());

        for (int i = 0; i < 10; i++) {
            byteBuf.clear();
            byteBuf.writeBytes(defaultBytes);

            channel.writeInbound(byteBuf);
            channel.readInbound();
        }
    }


    public static class CreateMessageHandler extends ChannelInboundHandlerAdapter {

        private InternalLogger logger = InternalLoggerFactory.getInstance(CreateMessageHandler.class);

        @Override
        public void channelRead(ChannelHandlerContext ctx, Object msg) {
            logger.info("ChannelInboundHandler: {}", this.getClass().getSimpleName());
            logger.info("msg: {}", msg);
            ctx.fireChannelRead(msg);
        }
    }

    public static class HandMessageHandler extends ChannelInboundHandlerAdapter {

        private InternalLogger logger = InternalLoggerFactory.getInstance(CreateMessageHandler.class);

        @Override
        public void channelRead(ChannelHandlerContext ctx, Object msg) {
            logger.info("ChannelInboundHandler: {}", this.getClass().getSimpleName());
            ctx.fireChannelRead(msg);
        }

    }
}

三、运行结果:

EmbeddedChannel.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容