netty组件
所属分类 netty
浏览量 1316
Bootstrap ServerBootstrap
Netty应用通常由一个Bootstrap开始, 配置 各个组件
Bootstrap 客户端程序启动引导类
ServerBootstrap 服务端启动引导类
Future ChannelFuture
NettyIO操作是异步的,不能立刻获取处理结果,可以注册一个监听,当操作执行成功或失败时回调
Channel
执行网络I/O操作
当前网络连接的通道状态(例如是否打开 是否已连接)
网络连接配置参数 (例如接收缓冲区大小)
异步的网络I/O操作(如建立连接,读写,绑定端口),
异步调用立即返回一个ChannelFuture实例,通过注册监听器到ChannelFuture上,IO操作成功、失败或取消时回调通知调用方。
不同协议、不同的阻塞类型连接有不同的 Channel 类型
常用的 Channel 类型
NioSocketChannel
NioServerSocketChannel
NioDatagramChannel
NioSctpChannel
NioSctpServerChannel
Selector
Netty基于Selector实现I/O多路复用, 一个线程可以监听多个连接的Channel事件
NioEventLoop
维护了一个线程和任务队列,支持异步提交执行任务,线程启动时调用NioEventLoop的run方法,执行IO任务和非IO任务
I/O任务
selectionKey中ready的事件,如accept、connect、read、write等,由processSelectedKeys方法触发。
非IO任务
添加到taskQueue中的任务,如register0、bind0等任务,由runAllTasks方法触发。
两种任务的执行时间比由变量ioRatio控制,默认为50,则表示允许非IO任务执行的时间与IO任务的执行时间相等。
NioEventLoopGroup
管理eventLoop的生命周期,可以理解为一个线程池,内部维护了一组线程
每个线程(NioEventLoop)负责处理多个Channel上的事件,而一个Channel只对应于一个线程。
ChannelHandler
处理IO事件或拦截IO操作,并将其转发到其ChannelPipeline(业务处理链)中的下一个处理器
ChannelInboundHandler 处理入站IO事件
ChannelOutboundHandler 处理出站IO操作
适配器类
ChannelInboundHandlerAdapter
ChannelOutboundHandlerAdapter
ChannelDuplexHandler 用于处理入站和出站事件
ChannelHandlerContext
保存Channel相关的所有上下文信息,同时关联一个ChannelHandler对象
ChannelPipline
ChannelHandler 列表 ,用于处理或拦截Channel的入站事件和出站操作
ChannelPipeline 拦截过滤器模式,可以控制事件的处理方式,以及Channel中各个的ChannelHandler的交互
ChannelPipeline中的ChannelHandler 处理I/O事件
IO事件由ChannelInboundHandler或ChannelOutboundHandler处理
调用ChannelHandlerContext中定义的事件传播方法转发到其最近的处理器
ChannelHandlerContext.fireChannelRead(Object)
ChannelOutboundInvoker.write(Object)
入站事件
SocketChannel.read(ByteBuffer) 从远程读取入站数据
出站事件
出站Handler 生成或转换出站传输,例如 write
SocketChannel.write(ByteBuffer)
每个 Channel 都有且仅有一个 ChannelPipeline 与之对应
一个 Channel 包含一个 ChannelPipeline,
ChannelPipeline 维护了一个由 ChannelHandlerContext 组成的双向链表
每个 ChannelHandlerContext 又关联一个 ChannelHandler
入站事件和出站事件在一个双向链表中,入站事件会从链表head往后传递到最后一个入站的handler,
出站事件会从链表tail往前传递到前一个出站的handler
两种类型的handler互不干扰
上一篇
下一篇
netty4 echo例子 日志记录
性能压测工具
netty线程模型和零拷贝机制
netty运行原理
netty4日志
UnsupportedClassVersionError处理