• Netty源码剖析-业务处理


    参考文献:极客时间傅健老师的《Netty源码剖析与实战》Talk is cheap.show me the code!

    ----主线:worker thread

      触发pipeline.fireChannelRead(byteBuf)把读取到的数据传播出去

      

    ----源码解释:

      还和之前一样,在NioEventLoop里面加断点:

     然后启动服务端和客户端:效果图:

     然后跟进read();由于步骤和之前的源码差不多,所以这次只挑重点:

    这个就是业务处理的入口,所以跟进去看看即可:

    这个head表示从头开始的,继续跟进去:

    这里的next默认的就是NioEventLoop;所以继续跟进:

    继续跟进channelRead();

    ctx.fireChannelRead(msg);表示继续在pipeline上传递,继续跟进:

    继续跟进方法:

     接着往下走:

     这里就相当于就算运算结果。

    ----总结:

      处理业务的本质:数据在pipeline中所有的handler的channelRead()执行过程

        前提:Handler要实现io.netty.channel.ChannelInboundHandler#channelRead(ChannelHandlerContext ctx,Object msg),且不能加注解@Skip

        中途可以退出,不保证执行到tail handler

      默认处理线程就是Channel绑定的NioEventLoop线程,也可以设置其他

        pipeline.addLast(new UnorderedThreadPoolEventExecutor(10),serverHandler)。

    我只想做的更好,仅此而已。

  • 相关阅读:
    mysql随笔
    nodejs+websocket+egret
    mysql语法
    npm没反应的坑------windows配置nodejs
    nodejs打包模块问题
    nodejs中使用protobuf遇见的环境变量问题
    自己写的.net ORM 框架
    常用正则验证
    .NET中判断国内IP和国外IP
    位运算
  • 原文地址:https://www.cnblogs.com/-qilin/p/11813704.html
Copyright © 2020-2023  润新知