《Netty实战》(《Netty In Action》)是一本好书,是我正在读的一般关于netty入门的书,我喜欢把知识点提出来记录,回头方便查看
1.什么是Netty?
Netty是一款基于Java NIO的异步和事件驱动实现的高性能网络框架
2.Netty有哪些重要的组件
Channel,EventLoop,ChannelFuture,ChannelHandler,ChannelPipeline
3.Netty网络抽象的代表
Channel-----Socket
EventLoop-----控制流,多线程处理,并发
ChannelFuture-----异步通知
4.Channel下常用的子类
EmbeddedChannel
LocalServerChannel
NioDatagramChannel
NioSctpChannel
NioSocketChannel
5.EventLoop接口
5.1 EventLoop定义了netty的核心抽象,用于处理连接的生命周期中所发生的事情,它处理有关Channel的所有IO操作,而且它是绑定线程的。总体来看,它类似于Java NIO中Selector
5.2 一个EventLoopGroup包含一个或者多个EventLoop
5.3 一个EventLoop在它的生命周期内只和一个Thread绑定
5.4 所有由EventLoop处理的IO时间都将在它专有的Thread上处理
5.5 一个Channel在它的生命周期内只注册于一个EventLoop
5.6 一个EventLoop可能会被分配给一个或多个Channel
6.ChannelFutrue接口
Netty的所有IO操作都是异步的,所以绑定结果到ChannelFutrue上,同时可以往它身上addListener(),绑定ChannelFutrueListener的实例,来实现结果回调
7.ChannelHandler和ChannelPipeline
7.1 Netty的主要组件是ChannelHandler,它充当了所有处理入站和出站数据的应用程序逻辑的容器
7.2 ChannelHandler可专门用于几乎任何类型的动作,例如将数据从一种格式转换为另外一种格式,或者处理转换过程所跑出来的异常
7.3 ChannelPipeline提供了ChannelHandler链的容器,并定义了用于在该链上传播入站和出站事件流的API。当Channel被创建时,它会被自动地分配到它专属的ChannelPipeline
7.4 ChannelHandler安装到ChannelPipeline的过程如下所示
7.4.1 一个ChannelInitializer的实现注册到可引导
7.4.2 当ChannelInitializer.initChannel()方法被调用时,ChannelInitializer将在ChannelPipeline中安装一组自定义的ChannelHandler
7.4.3 ChannelInitializer将自己从ChannelPipeline中移除
7.5 ChannelPipeline会自己识别那些是出站的ChannelHandler哪些是入站的。
7.6 在Netty中有两种发送消息的方式,可以直接写入到Channel中,也可以写入到ChannelContext中,前一种方式直接导致数据从Pipeline的尾端流动,而后者是传递给了下一个ChannelHandler
7.7 ChannelHandler也提供了很多立即可用的适配器类
ChannelHandlerAdapter
ChannelInboundHandlerAdapter
ChannelOutboundHandlerAdapter
ChannelDuplexHandlerAdapter
8.引导---bootstrap
引导就是bootstrap,再构建Netty服务端或者客户端的时候,最不可缺少的就是引导了,在引导中,比较值得注意的点是,bootstrap只需要一个EventLoop,而ServerBootstrap需要2个EventLoop,主要是因为后者需要一个专门处理ServerSocketChannel的EventLoop,然后一个去处理连接进来的SocketChannel
9.个人关于ChannelPipeline的看法
连接入站的时候将会经过ChannelPipeline并且经过层层ChannelHandler处理,这类似与观察者模式,出站的时候也一样
这是Netty实战第三章中个人提取的知识点,可能比较枯燥乏味,也谢谢各位的浏览和阅读,如果需要转载,请注明转载地址