netty基础知识讲解

Reactor线程模型分为单线程模型,多线程模型,主从线程模型

netty线程模型一般采用Reactor主从线程模型

 

EventLoopGroup表示线程池,EventLoop表示线程,channel表示客户端和服务端的连接通道

EventLoopGroup包含EventLoop,一个EventLoop包含一个Selector,一个Selector可以处理多个channel

new NioEventLoopGroup() 默认创建的线程池线程数量是系统cpu核数*2

 

ServerBootstrap  引导类 

.group( ) 设置线程组,

.channel( ) 设置通道类型  Nioserversocketchannel

.option( )  设置每一个新建立的channel中Tcp连接参数,比如已经成功三次握手的请求队列的长度,是否关闭Nagle算法等

.childOption( ) 作用于被acceptor之后的连接

.childHandler( ) 对每个通道的数据的处理 

 

Channel表示客户端和服务端的连接通道,是对socket的包装

Channel的生命周期,ChannelRegisterd  ====》 ChannelActive ====> ChannelInactive ===》ChannelUnregistered

ChannelRegisterd   注册表示将channel和EventLoop中的Selector绑定

ChannelActive   激活表示可以发送和接受数据

 

ChannelHandler和ChannelPipeline

ChannelHandler对通道中的数据进行处理

ChannelPipeline是对ChannelHandler进行管理的管道,可以添加ChannelHandler和删除ChannelHandler等

一个channel对应一个ChannelPipeline,一个ChannelPipeline管理多个ChannelHandler

 

ChannelHandlerContext表示的是ChannelHandler和ChannelPipeline之间的桥梁

 

ChannelHandler的执行顺序

InboundHandler顺序执行,OutboundHandler逆序执行

InboundHandler之间传递数据,通过ctx.fireChannelRead() 方法

向管道中添加ChannelHandler一般是先逐个OutboundHandler,在逐个添加InboundHandler。最后一个InboundHandler通过ctx.write() 方法将数据传递到OutboundHandler

 

不要在ChannelHandler中调用future的sync或者awat方法

posted @ 2019-12-28 22:42  踏月而来  阅读(388)  评论(1编辑  收藏  举报