猜你喜欢
跟闪电侠学 Netty:Netty 即时聊天实战与底层原理

跟闪电侠学 Netty:Netty 即时聊天实战与底层原理

书籍作者:俞超 ISBN:9787121426797
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:2886
创建日期:2022-12-24 发布日期:2022-12-24
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

这是一本专门为 Netty 初学者打造的入门及进阶学习图书,无论你之前有没有使用过 Netty,都可以从本书中有所收获。本书分上下两篇。上篇通过一个即时聊天系统的实战案例,让读者能够系统地使用一遍 Netty,全面掌握 Netty 的知识点;下篇通过对源码的层层剖析,让读者能够掌握 Netty 底层原理,知其然并知其所以然,从而编写出高性能网络应用程序。如果你想全面系统地学习 Netty,并掌握一些性能调优方法,本书上篇可以帮助你完成这个目标。如果你想深入了解 Netty 的底层设计,编写出更灵活高效的网络通信程序,本书下篇可以帮助你完成这个目标。如果你从未读过开源框架源码,本书将是你的第一本源码指导书,读源码并不难,难的是迈出这一小步,之后就能通往更广阔的世界。


作者简介

闪电侠(俞超),某互联网公司技术专家。精通Netty、Spring、MyBatis 等开源框架。负责公司各类长连项目的开发与维护,有千万级别实时在线连接、百亿吞吐长连通信经验。Vim和IDEA党,对效率和编写优美代码有极致追求。

编辑推荐
适读人群 :从未读过开源框架源码的人、听说过或简单使用过Netty的人、深度使用过Netty的人

★Netty 底层原理完整体系拓荒者闪电侠首本著作

★通过一个 IM 的例子全面介绍 Netty 的使用,实战性较强

★不同于其他书,本书入门部分可一口气读完,一周内进入实战

★同时涵盖大量的避坑范例,读者可直接拿到生产环境使用

★入门部分每一部分都有对应底层原理介绍,知其然并知其所以然

★不同于其他书,源码部分站在初学视角,读者可经历完整探索过程

★作者经验丰富,长年专注于研究 Netty 在生产环境的使用及性能调优

★本书相关博客、视频及电子书阅读量 100w+,得到网友一致好评


前言

为什么写这本书

Netty是互联网中间件、大数据领域使用最广泛、最核心的网络通信框架。由下图可以看到,几乎所有互联网中间件、大数据框架均使用了Netty,掌握Netty是一名初中级工程师迈向中高级工程师所需的最重要的技能之一。

然而笔者发现,目前市面上对初学者友好的Netty资料较少,网络上大多数技术博客都是一堆零散的知识点集合,无法串成一条线形成一个体系。笔者在多年的Netty实战、调优、“踩坑”过程中积累了丰富的经验,本书中笔者将这部分经验系统地分享给大家,帮助大家提升核心竞争力。

本书上篇通过一个即时聊天的例子,让读者能够系统地使用一遍Netty,全面掌握Netty的知识点;下篇通过对源码的层层剖析,让读者能够掌握Netty底层原理,知其然并知其所以然,从而编写出高性能网络应用程序。

上篇 入门实战

在入门实战篇中,读者跟随笔者实践完这个即时聊天系统后,能够学会如何使用Netty完成最基本的网络通信程序,可以掌握以下知识点:

1. 如何启动服务端?

2. 如何启动客户端?

3. 如何设计长连自定义协议?

4. 拆包/粘包原理与实践。

5. 如何实现自定义编解码。

6. 如何使用Pipeline与ChannelHandler?

7. 心跳与空闲检测的方法。

8. 如何性能调优?

下篇 源码分析

在源码分析篇中,笔者从用户视角出发,环环相扣,带领读者逐个攻破Netty底层原理,掌握以下知识点:

1. 服务端启动流程:ServerBootstrap外观,创建NioServerSocketChannel,初始化,注册Selector,绑定端口,接收新连接。

2. 高并发线程模型:Netty无锁化串行设计,精心设计的Reactor线程模型榨干CPU、打满网卡、让应用程序性能爆表的底层原理。

3. 新连接接入流程:Boss Reactor线程,监测新连接,创建NioSocketChannel,IO线程分配,Selector注册事件。

4. 解码原理:解码顶层抽象,定长解码器,行解码器,分隔符解码器,基于长度域解码器全面分析。

5. 事件传播机制脉络:大动脉Pipeline,处理器ChannelHandler,Inbound和Outbound事件传播与异常传播的原理,编码原理。

6. writeAndFlush流程:深入了解使用最频繁的writeAndFlush的底层原理,避免踩坑。

适合人群

本书适合以下三类人群:

1. 如果你听说过或简单使用过Netty,想全面系统地学习Netty,并掌握一些性能调优方法,本书的入门实战篇可以帮助你达成这个目标。

2. 如果你深度使用过Netty,想深入了解Netty的底层设计,编写出更灵活高效的网络通信程序,本书的源码分析篇可以帮助你达成这个目标。

3. 如果你从未读过开源框架源码,本书将是你的第一本源码指导书,阅读优秀的开源软件源码可以助你写出更优美的程序。读源码并不难,难的是迈出这一小步,之后就能通往更广阔的空间。

本书推荐使用方式

1. 按章节顺序把入门实战篇的代码一章章敲出来,在没有掌握前一章节的知识点之前,建议不要跳跃学习。

2. 入门实战篇学完之后,合上书本,把本书即时聊天系统的代码再整体敲若干遍,敲的过程中可能会发现自己有遗忘知识点,这个时候可能需要不断翻阅书本,没有关系,翻阅就好了。

3. 确保最后一次实现本书的即时聊天系统的例子是没有翻阅书本的,是完全自行实现的,之后进入源码分析篇的学习。

4. 针对源码分析篇,建议读者按章节顺序来学习,不要跳跃,不要图快,每一步都要扎实。

5. 在源码学习的过程中,先跟随书本,对照源码(Netty 4.1.6),把对应章节的流程过一遍,每个章节学完之后,建议花较多的时间进行调试和阅读,确保掌握了前一章节的内容之后再进行下一章的学习。

作者介绍

闪电侠,某互联网公司技术专家。精通Netty、Spring、MyBatis 等开源框架。负责公司各类长连项目的开发与维护,有千万级别实时在线连接、百亿吞吐长连通信经验。Vim和IDEA党,对效率和编写优美代码有极致的追求。

目录

上篇 入门实战

第1章 即时聊天系统简介

1.1 单聊流程

1.2 单聊的指令

1.3 群聊流程

1.4 群聊要实现的指令集

1.5 Netty

1.6 本书实现的即时聊天形式

第2章 Netty是什么

2.1 IO编程

2.2 NIO编程

2.3 Netty编程

第3章 Netty开发环境配置

3.1 Maven

3.2 Git

3.3 IntelliJ IDEA

第4章 服务端启动流程

4.1 服务端启动最小化代码

4.2 自动绑定递增端口

4.3 服务端启动的其他方法

4.4 总结

第5章 客户端启动流程

5.1 客户端启动Demo

5.2 失败重连

5.3 客户端启动的其他方法

5.4 总结

5.5 思考

第6章 客户端与服务端双向通信

6.1 客户端发送数据到服务端

6.2 服务端读取客户端数据

6.3 服务端返回数据到客户端

6.4 总结

6.5 思考

第7章 数据载体ByteBuf的介绍

7.1 ByteBuf的结构

7.2 容量API

7.3 读写指针相关的API

7.4 读写API

7.5 实战

7.6 总结

7.7 思考

第8章 客户端与服务端通信协议编解码

8.1 什么是客户端与服务端的通信协议

8.2 通信协议的设计

8.3 通信协议的实现

8.4 总结

8.5 思考

第9章 实现客户端登录

9.1 登录流程

9.2 逻辑处理器

9.3 客户端发送登录请求

9.4 服务端发送登录响应

9.5 总结

9.6 思考

第10章 实现客户端与服务端收发消息

10.1 收发消息对象

10.2 判断客户端是否登录成功

10.3 在控制台输入消息并发送

10.4 服务端收发消息处理

10.5 客户端收消息处理

10.6 总结

10.7 思考

第11章 Pipeline与ChannelHandler

11.1 Pipeline与ChannelHandler的构成

11.2 ChannelHandler的分类

11.3 ChannelInboundHandler的事件传播

11.4 ChannelOutboundHandler的事件传播

11.5 总结

11.6 思考

第12章 构建客户端与服务端的Pipeline

12.1 ChannelInboundHandlerAdapter与ChannelOutboundHandlerAdapter

12.2 ByteToMessageDecoder

12.3 SimpleChannelInboundHandler

12.4 MessageToByteEncoder

12.5 构建客户端与服务端的Pipeline

12.6 总结

12.7 思考

第13章 拆包/粘包理论与解决方案

13.1 拆包/粘包例子

13.2 为什么会有粘包、半包现象

13.3 拆包的原理

13.4 Netty自带的拆包器

13.5 如何使用LengthFieldBasedFrameDecoder

13.6 拒绝非本协议连接

13.7 客户端和服务端的Pipeline结构

13.8 总结

13.9 思考

第14章 ChannelHandler的生命周期

14.1 ChannelHandler的生命周期详解

14.2 ChannelHandler生命周期各回调方法的用法举例

14.3 总结

14.4 思考

第15章 使用ChannelHandler的热插拔实现客户端身份校验

15.1 身份检验

15.2 移除校验逻辑

15.3 身份校验演示

15.4 总结

15.5 思考

第16章 客户端互聊的原理与实现

16.1 最终效果

16.2 一对一单聊的原理

16.3 一对一单聊的实现

16.4 总结

16.5 思考

第17章 群聊的发起与通知

17.1 最终效果

17.2 群聊的原理

17.3 控制台程序重构

17.4 创建群聊的实现

17.5 总结

17.6 思考

第18章 群聊的成员管理

18.1 最终效果

18.2 群的加入

18.3 群的退出

18.4 获取群成员列表

18.5 总结

18.6 思考

第19章 群聊消息的收发及Netty性能优化

19.1 群聊消息的最终效果

19.2 群聊消息的收发实现

19.3 共享Handler

19.4 压缩Handler——合并编解码器

19.5 缩短事件传播路径

19.6 减少阻塞主线程的操作

19.7 如何准确统计处理时长

19.8 总结

第20章 心跳与空闲检测

20.1 网络问题

20.2 服务端空闲检测

20.3 客户端定时发心跳数据包

20.4 服务端回复心跳与客户端空闲检测

20.5 总结

20.6 思考

下篇 源码分析

第21章 服务端启动流程解析

21.1 服务端启动示例

21.2 服务端启动的核心步骤

21.3 创建服务端Channel

21.4 初始化服务端Channel

21.5 注册服务端Channel

21.6 绑定服务端端口

21.7 总结

第22章 Reactor线程模型解析

22.1 NioEventLoopGroup的创建

22.2 NioEventLoop对应线程的创建和启动

22.3 NioEventLoop的执行流程

22.4 总结

第23章 客户端连接接入流程解析

23.1 新连接接入的总体流程

23.2 检测到有新连接

23.3 注册Reactor线程

23.4 总结

第24章 编码原理解析

24.1 粘包与拆包

24.2 拆包的原理

24.3 Netty中拆包的基类

24.4 拆包抽象

24.5 行拆包器

24.6 特定分隔符拆包

24.7 LengthFieldBasedFrameDecoder 进阶用法

24.8 LengthFieldBasedFrameDecoder源码剖析

24.9 总结

第25章 ChannelPipeline解析

25.1 ChannelPipeline的初始化

25.2 ChannelPipeline添加ChannelHandler

25.3 ChannelPipeline删除ChannelHandler

25.4 Inbound事件的传播

25.5 Outbound事件的传播

25.6 ChannelPipeline中异常的传播

25.7 总结

第26章 writeAndFlush解析

26.1 Pipeline中的标准链表结构

26.2 Java对象编码过程

26.3 write:写队列

26.4 flush:刷新写队列

26.5 writeAndFlush:写队列并刷新

26.6 总结

第27章 本书总结

27.1 Netty是什么

27.2 服务端和客户端的启动

27.3 ByteBuf

27.4 自定义协议拆包与编解码

27.5 Handler与Pipeline

27.6 耗时操作的处理与统计

27.7 最后的话

标签
计算机,网络,编程,Java
产品特色