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)。
我只想做的更好,仅此而已。
Netty源码剖析-业务处理的更多相关文章
- Netty源码剖析-接受数据
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线:worker thread ①多路复用器(Select ...
- Netty 源码剖析之 unSafe.write 方法
前言 在 Netty 源码剖析之 unSafe.read 方法 一文中,我们研究了 read 方法的实现,这是读取内容到容器,再看看 Netty 是如何将内容从容器输出 Channel 的吧. 1. ...
- Netty源码剖析-关闭服务
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线: ----源码: 先在服务端加个断点和修改下代码:如 ...
- Netty源码剖析-断开连接
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线: ----源码: 在NioEventLoop的unsa ...
- Netty源码剖析-发送数据
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! 开始之前先介绍下Netty写数据的三种方式: ①:write:写到一 ...
- Netty源码剖析-构建链接
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线: 和启动一样也是有两个线程完成的,boss threa ...
- Netty源码剖析-启动服务
参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! --1主线分两步: 一:首先在our thread里,如果写在mai ...
- Netty学习笔记(三)——netty源码剖析
1.Netty启动源码剖析 启动类: public class NettyNioServer { public static void main(String[] args) throws Excep ...
- Netty 源码剖析之 unSafe.read 方法
目录: NioSocketChannel$NioSocketChannelUnsafe 的 read 方法 首先看 ByteBufAllocator 再看 RecvByteBufAllocator.H ...
随机推荐
- LibreOJ #102. 最小费用流
二次联通门 : LibreOJ #102. 最小费用流 /* LibreOJ #102. 最小费用流 Spfa跑花费 记录路径 倒推回去 */ #include <cstring> #in ...
- ZROI NOI2019集训汇总
Day1 T1:已改但咕了(下午就补,没力气写了...) T2:未改 T3:未改 Day2 T1:在这里 T2:未改 T3:在这里 Day3 T1:在这里 T2:博客写在了本地,结果被数据清空了... ...
- c实现双向链表
实现双向链表:创建.插入.删除 #include <iostream> #include <stdio.h> #include <string.h> #includ ...
- 顺序表应用7:最大子段和之分治递归法(SDUT 3664)
#include <bits/stdc++.h> using namespace std; const int maxn = 50005; int num = 0; struct node ...
- 7.26T1四分图匹配
四分图匹配 题目描述 一天晚上,zzh 在做梦,忽然梦见了她. 见到她,zzh 也不去看她,只顾低头自语…… “噫,OI 这个东西,真是无奇不有.” “嘿,你又学了什么?” “嗯,学到了一种算法,”z ...
- 2016百度之星资格赛 Problem B(大数+组合数)
题意:度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列.最多200个1. 比如 ...
- Java并发指南5:JMM中的final关键字解析
本文转载自互联网,侵删 与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问.对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的 ...
- 了解Spring Boot的自动配置
摘自:https://www.jianshu.com/p/ddb6e32e3faf Spring Boot的自动配置给开发者带来了很大的便利,当开发人员在pom文件中添加starter依赖后,mave ...
- MyBatis入门使用
MyBatis入门使用 MyBatis简介 MyBatis是支持普通SQL查询.存储过程和高级映射的持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBati ...
- Flutter移动电商实战 --(38)路由_Fluro中Handler编写方法
在main.dart中初始化Fluro 编写handler 在lib下新建routers文件夹,表示里面要很多路由相关的文件 我们声明一个Handler,在里面handlerFunc固定的两个参数 重 ...