概念
在逐个讨论之前,让我们先做一个简述,以对之后要说的核心概念有一个大概认识
EventLoop
与EventLoopGroup
Channel
(Netty
对NIO
的Channel
进行了封装)NettyFuture
Promise
Handler
与Pipeline
ByteBuf
EventLoop与EventLoopGroup
EventLoop
相当于一个单线程的事件执行者,负责对Channel
中的事件进行处理。
EventLoopGroup
中可以有多个EventLoop
。Channel
一般会通过EventLoopGroup
的register
方法来绑定其中一个EventLoop
(一对一)。该Channel
的IO
事件都由绑定的EventLoop
处理。
Channel
Netty
的Channel
对NIO
的Channel
做了封装升级。
对于NIO
中SocketChannel
和ServerSocketChannel
统一了Channel
接口
同时支持更好的自定义处理
且它要适配Netty
的一些特性,所以Netty
使用自己封装的Channel
。
Future Promise
这两个接口一般用于异步处理,用于得到事件的结果。
Future
不同于jdk
的Future
,它可以异步方式得到结果。
Promise
则还可以作为两个线程间传递结果的容器。
比如在EventLoop
提交一个任务会返回一个Future
对象。我们可以通过Future.get
方法来获取任务执行结果。可以同步或者异步。
Handler与pipeline
ChannelHandler
相当于一道道处理工序。分为入站和出站。
Pipeline
相当于流水线。
多个ChannelHandler
连在一起,即为一个Pipeline
比如当读取Channel
数据时,就会经过一系列我们写的入站ChannelHandler
的处理,我们会拿到经过一系列处理的数据。
ByteBuf
ByteBuf
是Netty
对NIO
中ByteBuffer
的升级
相比于ByteBuffer
,ByteBuf
有以下优点:
可以动态扩容
不需要filp
方法进行读写模式切换
支持池化
支持链式调用
等等。
基本使用
这里直接贴上课程的图。十分详尽,我觉得相当清晰了。
结语
简单介绍Netty
中的重要组件。后续对每个组件都会具体的讨论api
使用与原理。
今天本来想把EventLoop
写完,发现有点多。明天再更。
感谢观看,欢迎批评指正。