240 发简信
IP属地:广东
  • 120
    netty源码分析之pipeline(一)

    通过前面的源码系列文章中的netty reactor线程三部曲,我们已经知道,netty的reactor线程就像是一个发动机,驱动着整个netty框架的运行,而服务端的绑定和...

  • ChannelPipeline pipeline = ch.pipeline();
    pipeline.addLast(new StringDecoder())
    .addLast(new StringEncoder())
    // TODO 这里对 01 和 02 进行分别测试可查看结果是否执行了 10 中的代码 打印 encoder invoked
    // .addLast(new NettyServer001WorkerHandler01())
    .addLast(new NettyServer001WorkerHandler02())
    // TODO 这里是出站处理器
    .addLast(new NettyServer001WorkerHandler10());

    static class NettyServer001WorkerHandler10 extends MessageToByteEncoder {
    @Override
    protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception {
    System.out.println("encoder invoked" + msg);
    }
    }

    static class NettyServer001WorkerHandler01 extends SimpleChannelInboundHandler<String> {
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
    System.out.println("01 ---> " + msg);
    // TODO 这里是 ctx.channel().writeAndFlush()
    ctx.channel().writeAndFlush("001");
    }
    }

    static class NettyServer001WorkerHandler02 extends SimpleChannelInboundHandler<String> {
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
    System.out.println("02 ---> " + msg);
    // TODO 这里是 ctx.writeAndFlush()
    ctx.writeAndFlush("002");
    }
    }

    netty源码分析之pipeline(一)

    通过前面的源码系列文章中的netty reactor线程三部曲,我们已经知道,netty的reactor线程就像是一个发动机,驱动着整个netty框架的运行,而服务端的绑定和...

  • 看调用方法 ctx.writeAndFlush() 是会从 当前 channel.pre 开始执行 handler,这里就不会调用 Encoder;如果是 ctx.channel().writeAndFlush()是从tail.pre开始执行 handler ,也就是会调用到 Encoder了

    netty源码分析之pipeline(一)

    通过前面的源码系列文章中的netty reactor线程三部曲,我们已经知道,netty的reactor线程就像是一个发动机,驱动着整个netty框架的运行,而服务端的绑定和...