Netty源码分析(完整版)html
前言java
前段时间公司准备改造redis的客户端, 原生的客户端是阻塞式连接, 而且连接池初始化的连接数并不高, 高并发场景会有获取不到链接的尴尬, 因此考虑了用netty长链接解决链接数和阻塞io问题redis
为此详细阅读了netty源码, 熟悉了netty的各个主要的特性以及疏通各个组件的关联关系, 因此想把这段时间的学习内容, 学习经验毫无保留的分享给你们, 本身提升的同时也帮助你们一块儿成长编程
内容中我会把每一个知识点经过每一个章节去进行剖析, 每一个章节也会尽量的将关键的流程细化, 但愿你们在学习的过程当中能领会到源码的关键步骤, 最好能本身能debug到源码进行剖析缓存
此文档会根据本身对netty的学习深刻, 不断地更新, 不断的细化, 不断的深刻各个模块的原理多线程
因为我的技术能力有限, 不免会有疏漏和错误的地方(我的学习过程当中就发现了一些其余文档中的错误), 发现问题, 也但愿各位同窗及时指正(轻喷.....)并发
下面归纳一些要点:框架
1. 学习netty源码须要什么知识?高并发
java基础就不用说了.....工具
因为本文档只是netty源码剖析并非netty教程, 因此这里并不打算讲nio和netty怎么用, 不了解的小伙伴能够首先熟悉下nio编程的基础, 没作过实战项目不要紧, 能写出helloworld, 并知道每一步是作什么的, 足矣
其次要有netty基本使用的能力, 咱们要知道netty完成链路以后在哪里执行咱们自定义的业务逻辑, 收到服务端(或者客户端)消息以后咱们须要在什么地方处理, 若是这块不熟悉, 能够网上找个demo学习, 或者学习下《netty实战》, 对此会有一个清晰的认识
再次咱们熟悉多线程相关的知识, 最好是用过jdk的线程并发库
若是以上知识都没问题, 那就开始愉快的学习吧
2. 这个文档如何学习?
文章会以章节的形式将每一个模块的关键部分进行剖析, 而且随着本身研究的不断深刻进行补充和修改, 文章并不打算对每一个细节进行细致入微的讲解, 而是提炼关键代码, 辅助你们串通整个netty的脉络, 串通的脉络以后, 咱们会很容易理解各个模块在框架中所承担的责任和义务, 以后若是进行自学就会变得很是容易
内容会尽可能用简单通俗的语言进行描述, 而且会附带我曾经学习某一部分的思考逻辑, 这些思路有可能会和读者产生共鸣, 从而能驾轻就熟的解决学习当中的困惑
每个源码, 我都会经过注释去讲解一些关键逻辑, 小伙伴们能够多关注下注释
在源码剖析过程当中, 同窗们须要本身debug进源码, 本身去疏通相关的逻辑关系, 只有课后本身动手, 才会真正掌握其原理, 不然, 是很难消化每一部分的精髓的
在内容中我也会提示你们, 须要关注的哪些步骤, 初学者只须要将本身的精力放在须要关注的步骤就好. 若是对其余步骤感兴趣也能够课后进行自行剖析
因为文章中会常常跟源码, 有的方法会跟的比较深, 因此跟踪方法的步骤会用加粗标志, 方便读者找到相应方法
最好, 是一边看着文档另外一边看着源码, 防止方法跟踪太深本身找不到回来的路........
3. 这篇文档学习完以后能达到什么水平?
写这篇文档的目的就是经过带同窗们解析源码的方式串通netty的整改脉络, 学完以后以后不能保证你能精通netty, 但至少咱们能串通起整个脉络, 熟悉每个组件, 每个模块在netty中所承担的角色, 以及一个消息从发送到接受经历了什么步骤, 从而使咱们能更容易的理解到这个框架的精髓, 为之后的继续深刻打下坚实的根基......
固然, 若是你学习的足够认真, 真正理解了脉络, 本身写一个简单的netty也不是不可能
用我最近的喜欢的鸡汤激励下小伙伴: 种树最好的时间是十年前, 其次是如今....
最后提醒下读者, 本文基于Netty的版本是4.1.16.Final
废话了这么多, 正文开始.....
目录:
第一章: 服务端启动流程
第二节: NioServerSocketChannel的建立
第二章: NioEventLoop
第一节: NioEventLoopGroup之建立线程执行器
第二节: NioEventLoopGroup之NioEventLoop的建立
第三章: 客户端接入流程
第一节: 初始化NioSocketChannelConfig
第四节: NioSocketChannel注册到selector
第四章: pipeline
第五章: ByteBuf
第六章: 解码器
第七章: 编码器和写数据
第八章: 高性能工具类FastThreadLocal和Recycler