「这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战」。
Netty API梳理
基于上述的各种demo,对Netty常用的类和方法进行系统梳理
Bootstrap
- ServerBootstrap 服务端启动引导类 BootStrap 客户端启动引导类
-
- .group() 给BootStrap设置NioEventLoopGroup,可以设置多个
- .channel() 设置服务使用的通道类
-
- .option() 设置通道参数
- .handler() 对BossGroup进行设置
-
- .childrenHandler() 对workerGroup 进行设置
- .bind() 服务端绑定一个端口号,监听端口
-
- connect() 客户端用于连接服务端
Future
Netty中的io操作都是异步的,也就是不能立刻返回结果,而是当完成了之后再通知调用者
- Future
- ChannelFutrue
方法
-
- channel() 返回当前正在进行IO操作的通道
- sync() 转为同步,等待异步操作完毕
Channel
不同协议,不同阻塞类型都有对应的Channel
- NioSocketChannel 异步tcp协议Socket连接
- NioServerSocketChannel 异步tcp协议服务端连接
- NioDatagramChannel 异步udp连接
- NioSctpChannel 异步sctp客户端连接
- NioSctpServerChannel 异步sctp服务端连接
Selector
Netty 基于Nio Selector对象实现多路复用,一个selector管理多个channel
ChannelHandler
主要是用于对数据的处理,其中有很多封装好的方法,使用的时候继承其子类即可
实现类
子类很多,常用的几个
channelHandler
- ChannelInboundHandler
- ChannelOutboundHandler
- 适配器
-
- channelInboundHandlerAdapter
- channelOutboundHandlerAdapter
pipeline
结构图如上
channel中可以创建出一个ChannelPipeline, ChannelPipeline中有维护了一个由ChannelHandlerContext组成的双向链表
每个ChannelHandlerContext又对应了一个Channelhandler
常用方法:
addFirst(); 添加一个Handler到链表中的第一个位置
addLast(); 添加到链表的最后一个位置
channelHandlerContext
每一个channelhandlerContext包含了一个channelHandler(业务处理)
channelHandlerContext中还可以获取到对应的channel和pipeline信息
channelHandlerContext.channel();
channelHandlerCOntext.pipeline();
EventLoopGroup
netty一般提供两个EventLoopGroup BossEventLoopGroup 和 workerEventLoopGroup
EventLoopGroup可以指定使用的核心是多少个
Unplooed
Netty提供的用来操作缓冲区数据的工具类
常用方法:
copiedBuffer(); 返回的是Netty提供的 Bytebuf对象
ByteBuf
Netty的数据容器(缓冲区)
可以直接进行读/写 读写之间不需要进行flip(),原因是ByteBuf内部维护了两个索引 readIndex writeIndex
常用方法
getByte()
readByte()
writeByte()
capacity()