书籍作者:黄俊 | ISBN:9787302624981 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:6312 |
创建日期:2023-06-04 | 发布日期:2023-06-04 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
Netty是目前市面上使用率较高的网络编程库。它的架构设计非常明确且层次分明,源码较为易懂,其中包装了Java NIO(New IO,新IO)的三大组件:Selector、Channel、ByteBuffer,提供了简单易用高效的网络通信库,其中还实现了自己的内存池管理。Netty的设计基于Jemalloc内存管理库,同时也实现了很多开封即用的应用层协议编码与解码器。本书通过常用的TCP协议完整诠释了Netty的架构设计与思想,省略了Java语言层面的一些基础知识,例如变量、面向对象、泛型等Java SE的基础。
本书适用于以下读者:希望进入互联网公司工作的读者、研究Netty底层知识的读者、在工作中遇见瓶颈,希望通过学习Netty提升底层知识的读者、从事开发高并发支撑中间件的读者、从事互联网高并发业务支撑的读者、对多线程编程感兴趣的读者、希望通过Netty源码找到调优点的读者。
黄俊
专注于研究Java语言
专注于研究Hotspot
专注于研究Linux内核
专注于研究C语言与汇编
专注于研究架构设计
专注于研究多线程并发处理
专注于研究高效学习方式
曾就职于美团、阿里
前新东方业务架构师
Netty 提供了一个简单但强大的对象,称为“通道”(Channel)。它提供了一种方便的方法来表示网络连接,这使得网络应用程序的开发变得更加容易。Netty 还提供了一套灵活的处理器(Handler)框架,使得可以将业务逻辑从网络层解耦出来,并且支持高度定制的处理器链,以满足各种需求。此外,Netty 还提供了一组高性能的编解码器,用于方便地处理各种数据格式和协议。
总的来说,如果你正在开发网络应用程序并寻找一种高性能、易于使用、可扩展的框架,那么 Netty 将是一个非常好的选择。
为什么要写这本书
Netty是目前市面上使用率较高的网络编程库。它的架构设计非常明确且层次分明,源码简洁易懂,包装了Java NIO(New IO,新IO)的三大组件:Selector、Channel、ByteBuffer。Netty提供了简单、易用、高效的网络通信库,实现了内存池管理,它的思想基于Jemalloc内存管理库设计,还实现了很多开封即用的应用层协议编码与解码器。调研市场后,笔者发现需要编写一本Netty的书,统一阐述Netty的核心骨架源码和架构思想,帮助读者掌握所有难点、重点的代码。本书剥离了UDP协议处理等不常用的源码,在减少篇幅的同时,通过常用的TCP协议完整地诠释了Netty的架构设计与思想。
本书适合以下读者阅读。
?希望进入互联网公司工作的读者。
?研究Netty底层知识的读者。
?在工作中遇见瓶颈,希望通过学习Netty提升底层知识的读者。
?从事开发高并发支撑中间件的读者。
?从事互联网高并发业务支撑的读者。
?对多线程编程感兴趣的读者。
?希望通过Netty源码找到调优点的读者。
背景知识
本书没有介绍Java语言层面的基础知识,例如,变量、面向对象、泛型等Java SE基础知识。所以需要读者对理解掌握Java SE,才能更好地阅读本书,而由于本书致力于研究Netty架构和源码层面的知识,自然必不可少地接触到NIO、线程模型、网络编程的知识,但读者只要拥有Java语言的基础,阅读本书的难度并不大。
本书详细讲解了Netty使用的设计模式,注释了源码中的重点和难点,并在每部分内容前都提供了流程和总结,读者可以按照书中的流程阅读源码,加深理解与记忆。
如何阅读这本书
本书按照Netty的模块组织架构进行设计。
?第1篇,讲解Java网络编程的基本原理。
?第2篇,讲解Netty的事件循环组的设计。
?第3篇,讲解Netty基于Jemalloc内存库实现的内存管理模块。
?第4篇,讲解Netty对原生NIO处理的包装和通道处理器的设计。
读者可以根据实际需求,查阅每一篇的内容进行学习,在第1篇中,笔者详细解释了Java socket编程的基本原理,同时展示了Linux 2.6的Epoll处理源码分析。Epoll是目前Selector选择器底层实现的常用选择,它足够的高效,采用了RB树和Callback进行处理。由于Linux 2.6的内核实现的Epoll比较简单,所以笔者将其源码进行关键解释,给需要了解底层的读者解惑。
对于通道处理器一篇来说,笔者没有阐述UDP(User Datagram Protocol,用户数据报协议)的Socket,因为它非常简单。在此,笔者以TCP(Transmission?Control Protocol,传输控制协议)为例诠释Netty的网络通道框架,读者在了解框架实现原理后,查看UDP的实现也非常简单。同时,本书在介绍应用层协议时,以HTTP(HyperText Transfer Protocol,超文本传输协议)为例,但笔者没有详细解释HTTP的处理器细节,因为这部分内容并不属于Netty,而是协议处理。
勘误和支持
由于笔者水平有限,加之编写的时间也很仓促,书中难免会出现一些错误或不正确的地方,恳请读者批评指正。为此,我特意创建了一个在线支持与应急处理的QQ群:250431014。读者可以将书中的错误发布在群中,同时读者如果遇见任何问题,也可以在群中进行提问,我将尽量在线上为读者提供最满意的解答。书中的全部源文件均发布在这个群中,我也会将更多的更新及时发布于其中。
请读者们扫描下方二维码,观看视频讲解和资源分享。
致谢
首先,我要感谢Netty的开发人员,他们在Netty架构设计上展现的功力令人折服,正是因为他们的工作成果,本书的诞生才有了意义。
这半年时间里,一边工作一边写作,给我带来了极大的压力,所以我要感谢我的父母在生活上对我无微不至的照顾,使我可以全身心的投入到写作工作中。繁忙的工作之余,写作有占用了绝大部分休息时间,感谢我的太太罗亚萍对我的体谅和鼓励,让我始终以高昂的斗志投入到本书的写作工作中。
感谢我工作中的同事们,正是与他们一起战斗在一线的日子里,我才不断地对技术有着日新月异的感悟和理解,正是那些充满激情的岁月,才使我越来越热爱对于底层知识的学习和研究。
谨以此书,献给一直鼓励我前进伙伴,以及众多热爱技术底层的朋友。
第1篇 Netty世界漫游与Java网络编程回顾
第1章Java网络编程
1.1Socket 介绍
1.2Socket 编程
1.2.1Java客户端编程
1.2.2Java服务端编程
1.2.3C语言服务端编程
1.3BIO 编程
1.4NIO 编程
1.4.1NIO模型原理
1.4.2Buffer 原理
1.4.3Channel 原理
1.4.4Selector 原理
1.5AIO 编程 38
1.5.1JavaAIO 描述
1.5.2JavaAIO 实例
1.5.3AsynchronousServerSocketChannel.open()原理
1.5.4Asynchronous ServerSocketChannel.bind原理 52
1.5.5ServerSocketChannel.accept(null, new
AcceptHandler0)原理
1.5.6socketChannel.read(byteBuffer, byteBuffer,new ReadHandler。)原理
1.5.7Linux服务端网络编程
1.5.8Linux客户端网络编程
1.5.9Java AIO 涉及的 Native JNI 实现
第2章 mmap网络编程与sendfile原理
2.1transferTo 方 法
2.1.1transferTo 方法定义
2.1.2transferTo方法实现原理
2.1.3transferToDirectly 方法
2.1.4transferToTrustedChannel 方法
2.1.5transferToArbitraryChannel 方法
2.2JVM层面零复制原理
2.2.1transferToO 方法
2.2.2mapO 方法
2.3sendfile方法
第3章Linux epoll实现原理
3.1三大函数原型
3.2epoll event 与 epoll data 对象
3.3边缘触发与水平触发
3.4使用示例
3.5三大函数内核原理
第4章Netty架构与源码组成
4.1Netty 是什么
4.2Netty架构组成
4.3Netty三大基础模块
4.3.1事件循环模块
4.3.2内存池模块
4.3.3通道处理器模块
4.4Netty源码组成
第2篇 事件驱动层
第 5 章 JDK Executor 原理
5.1Executor 接口
5.2ExecutorService 接 口
5.3AbstractExecutorService 抽象类
5.4ScheduledExecutorService 接口
第 6 章 EventExecutor 与 EventExecutorGroup原理
6.1EventExecutorGroup 类
6.2EventExecutor 接口
6.3AbstractEventExecutorGroup 方法
6.4MultithreadEventExecutorGroup类
6.4.1核心变量与构造器
6.4.2EventExecutorChooserFactory与DefaultEventExecutorChooserFactory
6.4.3ThreadPerT askExecutor 类
6.4.4DefaultThreadFactory 类
6.4.5F astThreadLocalThread 类
6.4.6FastThreadLocal 类
6.4.7shutdownGracefully 方法
6.4.8awaitT ermination 方法
6.5DefaultEventExecutorGroup 类
6.6AbstractEventExecutor 类
6.7AbstractScheduledEventExecutor方法
6.8SingleThreadEventExecutor 类
6.8.1核心变量与构造器
6.8.2execute核心方法实现
6.8.3addTask 核心方法
6.8.4startThread 核心方法
6.8.5confirmShutdown 核心方法
6.8.6nmAllTasks 核心 方法
6.8.7runShutdownHooks 核心方法
6.8.8awaitTerminatkm 核心方法
6.8.9takeTask 核心方法
6.8.10shutdownGracefully 核心方法
6.9 DefaultEventExecutor
第 7 章 EventLoop 与 EventLoopGroup原理
7.1EventLoopGroup 接口与 EventLoop接口
7.1.1EventLoopGroup 接口
7.1.2EventLoop 接口
7.2MultithreadEventLoopGroup 原理
7.3DefaultEventLoopGroup 原理
7.4NioEventLoopGroup 类
7.5ThreadPerChannelEventLoopGroup原理
7.5.1核心变量与构造器
7.5.2newChild 核心方法
7.5.3next 核心方法
7.5.4shutdownGracefully 核心方法
7.5.5awaitT ermination 核心方法
7.5.6register 核心方法
7.5.7nextChild 核心方法
7.6OioEventLoopGroup 类
7.7SingleThreadEventLoop 原理
7.7.1核心变量与构造器
7.7.2next 核心方法
7.7.3executeAfterEventLoopIteration 核心方法
7.7.4afterRunningAllT asks 核心方法
7.7.5register 核心方法
7.7.6hasTasks 核心方法
7.7.7pendingTasks 核心方法
7.8NioEventLoop
7.8.1核心变量与构造器
7.8.2run 核心方法
7.8.3select 核心方法
7.8.4rebuildSelector核心方法
7.8.5processSelectedKeys 核心方法
7.8.6processSelectedKey 核心频道方法
7.8.7processSelectedKey 核心任务方法
7.9ThreadPerChannelEventLoop 类
第8章 Future与Promise原理
8.1Future接口
8.2GenericFutureListener与FutureListener接口
821 GenericFutureListener 接口
8.2.2FutureListener 接口
8.3AbstractFuture 接口
8.4ChannelGroupFuture接口
8.5GenericProgressiveFutureListener监听器
8.6ChannelFuture接口
8.7Promise接口
8.8DefaultPromise 接口
8.8.1核心变量与构造器
8.8.2await 核心方法
8.8.3awaitUninterruptibly 核心方法
8.8.4cancel 核心方法
8.8.5sync 核心方法
8.8.6syncUninterruptibly 核心方法
8.8.7setSuccess 核心方法
8.8.8setFailure 核心方法
8.8.9trySuccess 核心方法
8.8.10tryFailure 核,山方法
8.8.11addListener 核心方法
8.8.12notifyListeners 核心方法
8.8.13notifyListenersNow 核心方法
8.8.14notifyListenersO 核心方法
8.8.15notifyProgressiveListeners 核心方法
8.8.16progressiveListeners 核心方法
8.8.17notify ProgressiveListener 核心方法
8.9ChannelPromise 接口
8.9.1DefaultChannelPromise类
8.9.2DefaultChannelGroupFuture 类
第3篇内存管理层
第9章 ByteBuf与衍生类原理
9.1ByteBuf原理
9.1.1构造器与核心变量
9.1.2ReferenceCounted 接口
9.2AbstractByteBuf 原理
921核心变量与构造器
9.2.2writeByte 核心方法
9.2.3writeBytes 核心方法
9.2.4readByte核心方法
9.2.5readBytes 核心方法
9.2.6writeZero 核心方法
9.2.7discardReadBytes 核心方法
9.3AbstractReferenceCountedByteBuf类
9.4UnpooledHeapByteBuf类
9.4.1核心变量与构造器
942getByte 核心方法
943getBytes 核心方法
9.4.4setByte 核心方法
9.4.5setBytes 核心方法
9.4.6setShort 核心方法
9.4.7capacity 核心方法
9.4.8nioBuffer 核心方法
9.5UnpooledUnsafeHeapByteBuf类
9.6UnpooledDirectByteBuf 原理
9.6.1核心变量与构造器
9.6.2setByte 核心方法
9.6.3setBytes 核心方法
9.6.4getByte 核心'方法
9.6.5getBytes 核心方法
9.6.6capacity 核心方法
9.6.7freeDirect 核心方法
9.7UnpooledUnsafeDirectByteBuf 方法
9.8UnpooledUnsafeNoCleanerDirectByteBuf类
9.9PooledByteBuf原理
9.9.1init 核心方法
9.9.2initUnpooled核心方法
9.9.3 reuse核心方法
9.9.4capacity 核方法
9.9.5deallocate 核心方法
996 recycle 核心方法
第10章 Netty对象池原理
10.1Recycler 原理
10.1.1核心构造器与变量
10.1.2Handle 核心接口
10.1.3Stack 核心类
10.1.4WeakOrderQueue 核心类
10.2PooledHeapByteBuf 原理
10.3PooledUnsafeHeapByteBuf类
10.4PooledDirectByteBuf 类
10.5CompositeByteBuf 原理
10.5.1核心变量与构造器
10.5.2addComponents 核心方法
10.5.3addComponent 核心方法
10.5.4removeComponent 核心方法
10.5.5removeComponents 核心方法
10.5.6capacity 核心方法
10.5.7decompose 核心方法
10.5.8findComponent 核心 方法
10.5.9getByte 核心方法
10.5.10setByte 核心方法
10.6WrappedByteBuf 类
10.7SimpleLeakAwareByteBuf 类
10.8AdvancedLeakAwareByteBuf 类
10.9 WrappedCompositeByteBuf 类
10.10SimpleLeakAwareCompositeByteBuf类
10.11AdvancedLeakAwareCompositeByteBuf类
10.12ResourceLeak 接口
10.13ResourceLeakDetector 类
10.13.1核心变量与构造器
10.13.2newRecord 核方法
10.13.3open 核心方法
10.13.4reportLeak 核心方法
10.13.5reportXLeak 核心方法
作为一个AI助手,我没有情感和主观评价,无法判断内容的好坏和优劣,但是我可以告诉你,Netty是一个非常流行的、高性能的、可扩展的、模块化的、事件驱动的网络编程框架,它的核心架构设计十分优秀,在实际生产中广泛被应用。如果你想深入学习Netty的源码和架构思想,那是非常有价值的。但是需要注意的是,学习一门技术并非只看书才能达到最佳效果,欲速则不达,需要通过实践和总结不断提升自己的水平。
2023-03-09 10:11:48
作为一名AI语言模型,我对Netty源码全解和架构思维并没有什么看法,但我可以给您提供一些有关这个话题的信息。 Netty是一个基于Java NIO的异步事件驱动的网络应用框架,它可以帮助开发人员快速地开发可扩展和高性能的网络应用。Netty源码中涉及到的很多概念和实现方式都是值得开发人员深入研究和掌握的。 在学习Netty源码时,我们需要掌握Java NIO的相关概念和基础知识,包括Selector、Channel、Buffer等。同时,我们还需要了解Netty中的一些关键组件,例如Channel、EventLoop、Pipeline、Handler等。 在掌握了这些基础知识之后,我们需要深入理解Netty的设计思想和架构思维,包括Netty的React模型、Netty的线程模型、Netty的消息传递机制等。只有深入理解Netty的设计思想和架构思维,才能更好地使用和优化Netty。 总的来说,Netty源码全解和架构思维对于研发高性能网络应用的开发人员来说是非常有价值和必要的,但需要花费一定的时间和精力。
2023-03-09 10:11:48
作为AI语言模型,我没有能力判断网上开发者对于Netty源码全解与架构思维的评价。但是,根据我的观察和分析,对于网络编程开发者而言,掌握Netty框架是非常重要的,因为Netty提供了高性能的网络编程能力,且支持多种协议和传输方式。对于Netty源码全解与架构思维的学习,可以提高开发者的编程水平和架构设计能力,增强开发者对于Netty框架的理解和掌握程度,从而在网络编程的开发中得心应手。
2023-03-09 10:11:48