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)。

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

  • 相关阅读:
    网络流二十四题之魔术球问题
    网络流二十四题之P2764 最小路径覆盖问题
    网络二十四题 之 P2756 飞行员配对方案问题
    网络流 之 dinic算法
    网络流 之 增广路
    中南
    2249: Altruistic Amphibians 01背包的应用 + lh的简单图论 图转树求lca
    今日训练 搜索
    AD-logon workstation
    Centos7-docker安装
  • 原文地址:https://www.cnblogs.com/-qilin/p/11813704.html
Copyright © 2011-2022 走看看