Netty常用api梳理

436 阅读2分钟

「这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战」。

Netty API梳理

基于上述的各种demo,对Netty常用的类和方法进行系统梳理

Bootstrap

  1. ServerBootstrap 服务端启动引导类 BootStrap 客户端启动引导类
    1. .group() 给BootStrap设置NioEventLoopGroup,可以设置多个
    2. .channel() 设置服务使用的通道类
    1. .option() 设置通道参数
    2. .handler() 对BossGroup进行设置
    1. .childrenHandler() 对workerGroup 进行设置
    2. .bind() 服务端绑定一个端口号,监听端口
    1. connect() 客户端用于连接服务端

Future

Netty中的io操作都是异步的,也就是不能立刻返回结果,而是当完成了之后再通知调用者

  1. Future
  1. ChannelFutrue
    方法
    1. channel() 返回当前正在进行IO操作的通道
    2. sync() 转为同步,等待异步操作完毕

Channel

不同协议,不同阻塞类型都有对应的Channel

  1. NioSocketChannel 异步tcp协议Socket连接
  1. NioServerSocketChannel 异步tcp协议服务端连接
  1. NioDatagramChannel 异步udp连接
  1. NioSctpChannel 异步sctp客户端连接
  1. NioSctpServerChannel 异步sctp服务端连接

Selector

Netty 基于Nio Selector对象实现多路复用,一个selector管理多个channel

ChannelHandler

主要是用于对数据的处理,其中有很多封装好的方法,使用的时候继承其子类即可

实现类

子类很多,常用的几个

channelHandler

  1. ChannelInboundHandler
  1. ChannelOutboundHandler
  1. 适配器
    1. channelInboundHandlerAdapter
    2. 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()