zoukankan      html  css  js  c++  java
  • 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)。

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

  • 相关阅读:
    关于SQLite
    Solr开发文档
    Using Fiddler with IIS
    SQL SERVER – Difference Between Union vs. Union All – Optimal Performance Comparison
    Git资料
    VS2010版快捷键
    IE9子iframe父iframe cookie设置诡异问题
    美国的企业家宣言
    互联网程序编写原则
    分析牛人js版删除代码注释(状态机机制)
  • 原文地址:https://www.cnblogs.com/-qilin/p/11813704.html
Copyright © 2011-2022 走看看