Netty 源码剖析与实战
傅健
Netty 源码贡献者、Cisco 高级软件工程师
32935 人已学习
新⼈⾸单¥59
课程目录
已完结/共 60 讲
第一章:初识Netty:背景、现状与趋势 (7讲)
第三章:Netty源码:从“线”(请求处理)的角度剖析 (8讲)
第六章:成长为Netty的贡献者 (6讲)
Netty 源码剖析与实战
登录|注册
留言
8
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 32 | 实现一个服务器端
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 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(8)

  • 最新
  • 精选
王盛武
server没有分boss和work?

作者回复: 你看的很细致,点赞,第四章雏形,所以直接写,方便起见,没有分,在第五章分了。看来把原理知识放前面还是有用的,直接能看出问题了。哈哈

2019-11-25
4
bbbi
老师您好! 1. 我这边看到是4.1.32.Final这个版本的,我在interface ChannelHandler中发现void exceptionCaught这个方法被被标记为Deprecated,是不是我在业务handle收集异常使用这个方法是不被建议的吗?还是有更好的解决方式? 2. 老师能简单的介绍一下,多个业务handler在fire事件的时候应该注意什么,或者有什么容易犯错的点吗?

作者回复: 1 业务handler的异常现在被分成两个部分了:读用异常处理,所以exceptionCaught才从ChannelHandler(Deprecated)搞到ChannelInboundHandler里面,而写是用 PromiseNotificationUtil.tryFailure(promise, cause, promise instanceof VoidChannelPromise ? null : logger);来控制,所以收集异常的exceptionCaught方法还是在用,只是说只针对读,所以才移动了位置; 其实这个分2部分,也可以参考第五章的25页的异常处理统计那部分,也能体现。 2 主要三个问题注意:(1)handler顺序 (2)handler是否可共享 (3)内部处理是否有有资源应该释放而未释放,比如堆外的bytebuf.

2019-12-03
1
姚远
老师 您现在的实现都是短链接的嘛?每个channel只使用一次? netty是不是应该有和数据库连接池类似的实现呀 链接复用 省去3握4挥的过程?望指点

作者回复: 都是长连接,netty默认都是长连接,除非你显式特地去断,所以,你从两个角度分析:服务器端有没有断你的连接?客户端有没有断你的连接,都没有,肯定长连接,默认也是没有的,因为他也不知道你的逻辑是需要一个请求断一次还是一定时间才断。

2019-11-27
1
shinee_x_X
老师,为什么你在channelread方法里就把结果给flush了呢,我理解是不是应该在readcomplete方法flush,channelread方法只是一次读事件的一部分数据啊。

作者回复: 你理解的没问题,直接channel read里写也没问题,因为已经是一次完整请求了,写在complete里面有好处,就是减少flush次数,这个在第五章会详细说,这里是案例雏形,所以先用最简单的方式展示给大家,另外你说的部分数据,到了业务层已经包含完整请求了,在一次解码的handler里倒是可能是“部分”,所以这里功能没有问题的。

2019-12-21
再续啸傲
老师的最后一行代码,有个closeFuture(),既然是长连接,这close的肯定不是连接,那close的是什么呢?

作者回复: 这里的close指的是服务器/客户端的关闭,不是单个连接的关闭。

2019-12-05
2
李干嘛
使用思路还是很清晰的
2022-11-21
熊猫
老师,handler和childHandler有什么区别呢?
2021-07-10
Alpha 👀
老师,请问handler添加顺序有影响吗?我理解pipeline中是区分出站和入站方向的,每个handler是有执行顺序的,添加handler的顺序是有讲究的。
2020-12-25
收起评论