通过前面的源码系列文章中的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框架的运行,而服务端的绑定和...