Channel
- 1.通信过程中基本的I/O操作如:bind()、connect()、read()、write()等。都依赖与的曾网络传输所提供的原语,非框架下,操作都在Socket中实现
- 2.Netty的Channel封装了这些底层原语的API,降低了直接使用Socket的复杂性
- 3.每个链接进入之后,都会为其注册一个Channel,所有的I/O操作都在这个Channel中进行
EventLoop 和 EventLoopGroup
- 1.服务器会维护一个EventLoopGroup
- 2.一个EventLoopGroup包含一个或者多个EventLoop
- 3.一个EventLoop生命周期内只会与一个线程绑定
- 4.一个EventLoop可以被一个或者多个Channel绑定
- 5.EventLoop就相当于一个处理区域,当有链接进入服务器时,EventLoopGroup会选择一个空闲的、可用的EventLoop去接受这个链接所在的Channel
- 6.一台服务器能给EventLoopGroup注册多少个EventLoop,取决于服务器的配置,如核心数和内存
ChannelFuture
- 1.Netty中所有链接的I/O操作都是异步的
- 2.ChannelFuture是异步操作的结果的占位符
- 3.ChannelFuture通过设置回调函数,来处理这个异步操作流程上的一些细节,比如成功的回调函数应该执行什么
- 4.通过ChannelFuture设置的回调函数什么时候执行并不确定,确定的是肯定会被执行
ChannelHandler
- 1.Netty中实现服务器逻辑的最重要组件
- 2.内置了ChannelInboundHandler,继承或者重写这个类可以用于处理入站时的一系列操作,比如解码,逻辑处理,等等
- 3.内置了ChannelOutbountHandler,继承或者重写这个类可以用于处理出站时的一系列操作,比如编码等等
- 4.是的,通过上面两条你们可以发现,处理的函数可以并不是一种,Netty中采用了链式操作的方法,可以一步步的将处理过的数据传到链的下个处理节点中,比如将网络I/O中读取的字节流进行解码,通常是解成一个Java对象,而后将这个对象交给下个逻辑处理点。
ChannelPipeline
- 1.被成为Netty的大动脉
- 2.上面所有的ChannelHandler都在这个对象中
- 3.可以被认为是ChannelHandler的容器
通过以上几个组件的说明,我们可以发现,Netty的巧妙之处就是已经写好的一个处理的基本框架,而我们需要做的就是把每一步的具体实现逻辑注册进去,