Netty 源码剖析与实战
傅健
Netty 源码贡献者、Cisco 高级软件工程师
32935 人已学习
新⼈⾸单¥59
课程目录
已完结/共 60 讲
第一章:初识Netty:背景、现状与趋势 (7讲)
第三章:Netty源码:从“线”(请求处理)的角度剖析 (8讲)
第六章:成长为Netty的贡献者 (6讲)
Netty 源码剖析与实战
登录|注册
留言
36
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 22 | 源码剖析:启动服务
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 揭开Netty面纱
04 | 为什么舍近求远:不直接用JDK NIO?
05 | 为什么孤注一掷:独选Netty?
06 | Netty的前尘往事
07 | Netty的现状与趋势
08 | Netty怎么切换三种I/O模式?
09 | 源码剖析:Netty对I/O模式的支持
10 | Netty如何支持三种Reactor?
11 | 源码剖析:Netty对Reactor的支持
12 | TCP粘包/半包Netty全搞定
13 | 源码剖析:Netty对处理粘包/半包的支持
14 | 常用的“二次”编解码方式
15 | 源码剖析:Netty对常用编解码的支持
16 | keepalive与idle监测
17 | 源码剖析:Netty对keepalive与idle监测的支持
18 | Netty的那些“锁”事
19 | Netty如何玩转内存使用
20 | 源码解析:Netty对堆外内存和内存池的支持
21 | Netty代码编译与总览
22 | 源码剖析:启动服务
23 | 源码剖析:构建连接
24 | 源码剖析:接收数据
25 | 源码剖析:业务处理
26 | 源码剖析:发送数据
27 | 源码剖析:断开连接
28 | 源码剖析:关闭服务
29 | 编写网络应用程序的基本步骤
30 | 案例介绍和数据结构设计
31 | 实现服务器端编解码
32 | 实现一个服务器端
33 | 实现客户端编解码
34 | 完成一个客户端雏形
35 | 引入"响应分发"完善客户端
36 | Netty编码中易错点解析
37 | 调优参数:调整System参数夯实基础
38 | 调优参数:权衡Netty核心参数
39 | 调优参数:图解费脑的三个参数
40 | 跟踪诊断:如何让应用易诊断?
41 | 跟踪诊断:应用能可视,心里才有底
42 | 跟踪诊断:让应用内存不“泄露”?
43 | 优化使用:用好自带注解省点心
44 | 优化使用:“整改”线程模型让"响应"健步如飞
45 | 优化使用:增强写,延迟与吞吐量的抉择
46 | 优化使用:如何让应用丝般“平滑”?
47 | 优化使用:为不同平台开启native
48 | 安全增强:设置“高低水位线”等保护好自己
49 | 安全增强:启用空闲监测
50 | 安全增强:简单有效的黑白名单
51 | 安全增强:少不了的自定义授权
52 | 安全增强:拿来即用的SSL-对话呈现表象
53 | 安全增强:拿来即用的SSL-抓包暴露本质
54 | 安全增强:拿来即用的SSL-轻松融入案例
55 | Cassandra如何使用Netty ?
56 | Dubbo如何使用Netty ?
57 | Hadoop如何使用Netty ?
58 | 赏析Netty之美
59 | 如何给Netty贡献代码?
60 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(36)

  • 最新
  • 精选
fanhang116
讲的不是很好,老师自己可能很清楚,但是不能深入浅出的讲出来,为讲代码而讲代码!如何深入浅出的讲出来需要技巧! 自己悟吧

作者回复: 三种境界吧,一是能解决问题,二是解决问题之外还知道原理,三是不仅知道原理还能说出来且让别人容易理解,第三种值得努力研究。

2019-11-08
2
33
再续啸傲
听到这,对于netty的一些组件不是很了解,就很难跟上课程进度。比如channel、eventloop与eventloopgroup的关系,又来个selector,感觉很混乱。

作者回复: 因为默认有一点了解的,所以很多细节一带而过了。这里补充说明下: channel: 也就是连接; eventloop:为连接服务的执行器,说白了,就是一个死循环(loop)轮训、处理channel上发生的事件(event)。一个channel只会绑定到一个eventloop,但是一个eventloop一般服务于多个channel. eventloopgroup: 假设就一个eventloop服务于所有channel,肯定会有瓶颈,所以搞一个组,相当于多线程了。

2019-12-03
28
nsn_huang
一定要自己手动debug,debug之后看视频就感觉很熟悉,能吸收很多内容。看了好几遍才理解,要有耐心啊。

作者回复: 是的,要有耐心,我打算课程结束,我也再从头到尾看一遍。哈哈

2019-11-10
3
9
13761642169
忽然想到,server 绑定多个端口的情况,是不是就用到 bossGroup 多个线程了?

作者回复: 你说的太对了!hadoop的web hdfs http服务器就绑定了两个端口。不记得后面的课程有没有提,所以这里我直接告诉你这样的案例,谢谢

2019-11-25
5
夏露
老师帮我回答一个问题, 比如说我一个bossgroup有8个线程, 在启动过程中, 初始化了8个NioEventGroup作为executor, 注册serversocketchannel的时候采用power(2)方式选择了其中1个, 然后绑定了serversocketchannel, 问题是其他7个NioEventGroup是不是没有用?如果有用,用来干嘛?

作者回复: 是的,没有用,判断有没有用的标准,就是看绑定的端口多少,像服务器,一般都绑定一个地址启动,比如8080,所以其他的的用不到,但是你绑定2个端口起启动就会用到了,比如一个绑定8080,一个绑定443.

2019-11-20
5
交叉路口
老师,看完视频后感觉理解不是很好,能不能画个图讲解一下?比如一个请求过来经过各个组件,每个组件所做的事情都画出来,这样再结合源码去看会效果比较好,不然听完源码解析,感觉并没有理解透啊

作者回复: 其实应该一口气把七个工序都读了,可能就清晰多了,回头我也画张图,再给大家串串,然后到时候(更新完后我集中把所有问题都处理)做个常见问题小册子给你们。最近在做课程,很多问题没来得及回复,不好意思

2019-11-05
5
鱼向北游
请问老师 以后会讲pipeline这块吗

作者回复: 后面有,在业务处理那块,如果到时候哪里不清楚,可以留言,谢谢。 这里可以简单说说:pipeline其实就像工厂的生产线,上面有很多道工序(channel handler),然后这个产线的开始就是接受到的原始数据,最终把产品加工,处理完,打包出去就结束了,本身还是很简单的,扩展性就在于这些工序可以随意定制,我们基于netty开发实际上就是写这些工序,然后有序组织起来。

2019-10-31
4
yihang
基本清楚了,需要对nio有一定掌握。一些细节自己下去再看。另外,channelnitializer 在哪里能看到是一次性的?没看到在哪里移除的?

作者回复: io.netty.channel.ChannelInitializer:里面在执行完后,有这样一句: pipeline.remove(this); 就是这句移除掉自己的。 private boolean initChannel(ChannelHandlerContext ctx) throws Exception { if (initMap.add(ctx)) { // Guard against re-entrance. try { initChannel((C) ctx.channel()); } catch (Throwable cause) { // Explicitly call exceptionCaught(...) as we removed the handler before calling initChannel(...). // We do so to prevent multiple calls to initChannel(...). exceptionCaught(ctx, cause); } finally { ChannelPipeline pipeline = ctx.pipeline(); if (pipeline.context(this) != null) { pipeline.remove(this); } } return true; } return false; }

2020-01-14
3
3
大象佩奇
每次听老师解读源码都晕晕的,是我太菜还是大家都这样

作者回复: 不懂也没有关系,抓住主线和本质就行了,因为细节就算懂了,过段时间也忘记了,然后另外,如果ppt上的主线和本质不懂的话,那可能要补下相关的知识。加油!

2019-11-03
3
小小征
老师想请教几个问题: 1.pipeline这块有点不太明白?为什么直接定位到head? 2.active 状态是不是做为channel bind地址和端口完成的一种状态? 3.selectionKey.interestOps(interestOps | readInterestOp); 这段代码代表了 注册OP_ACTIVE吗?并没有看到标识别啊 4.readInterestOp 这个字段为16是什么意思?

作者回复: 1 因为所有的pipeline都是以head开始,以tail结束。所以演示的时候,我知道核心逻辑在head中,所以为了节省跳转时间,直接定位到最后了。 2 是的,启动后,就active了。 3 没有OP_ACTIVE,注册的是readInterestOp,如果是ServerSocketChannel,就是指OP_ACCEPT,也就是16. 4 16代表accept,表示开始监听连接请求的事件了。

2019-10-30
2
1
收起评论