Netty核心组件

Netty应用始于BootStrap,包括ServerBootstrap和BootStrap,用于配置客户端和服务端。BootStrap提供group、channel、option等方法进行设置。Netty操作是异步的,通过Future、ChannelFuture监听事件。Selector实现多路复用,ChannelHandler处理IO事件,分为入站和出站处理。ChannelHandlerContext存储上下文信息并关联处理类。此外,EventLoopGroup用于事件执行,NioEventLoopGroup是其子类,负责连接管理和IO处理。
摘要由CSDN通过智能技术生成

BootStrap


一个Netty应用通常从一个BootStrap开始,由于配置整个程序
BootStrap是配置客户端的启动引导类
ServerBootStrap是配置服务端的启动引导类。

常用方法

  • ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup)用于设置BossGroup、workGroup
  • B group(EventLoopGroup group) 用于设置客户端Group
  • B channel(Class<? extends C> channelClass) 设置通道实现,根据传入的类反射生成
  • B option(ChannelOption option, T value) 给ServerChannel添加配置
  • ServerBootstrap childOption(ChannelOption childOption, T value) 给接收到的通道添加配置
  • ServerBootstrap childHandler(ChannelHandler childHandler) 用来设置业务处理类
  • ChannelFuture bind(int inetPort) 用于客户端绑定端口
  • ChannelFuture connect(String inetHost, int inetPort) 用于客户端连接服务端

childHandler用于workGroup即childGroup
handler用于bossGroup即parentGroup

Future、ChannelFuture


Netty的操作都是异步的,不能立即得知执行结果。但是可以根据监听器,当操作成功或失败时会自动触发注册的监听事件。

常见方法

  • channel 返回当前正在进行的IO通道
  • sync 等待异步执行结果操作完毕

Selector


Netty基于Selector实现多路复用,通过Selector监听多个Channel,Selector不断的查询注册的Channel是否有就绪的IO事件。

ChannelHandler


ChannelHandler是一个接口,处理IO事件或拦截IO事件,并将其转发到ChannelPipeline中的下一个处理程序。
ChannelHandler有很多子类。

  • ChannelInboundHandler接口处理入站IO事件
  • ChannelOutboundHandler接口处理出站IO事件
  • ChannelInbondHandlerAdapter类用于处理入站IO事件
  • ChannelOutboundHandlerAdapter类用于处理出站IO事件

出站:Server读管道中的数据为出站
入站:Server向管道写数据为入站

ChannelHandler中的方法

  • ChannelActive通道就绪事件
  • ChannelRead通道读取事件
  • ChannelReadComplate通道读取完毕事件
  • exceptionCaught通道异常事件
  • channelRegister 通道被注册
  • channerlUnRegister 通道被注销
  • handlerAdd 处理器被添加
  • handlerRemove 处理器被移除

ChannelHandlerContext


保存Channel所有的上下文信息,同时关联一个ChannelHandler对象。
通过ChannelHandlerContext,可以获取channel、pipeline、handler。

  • close 关闭通道
  • flush 刷新
  • write写数据

ChannelOption


设置参数.

  • ChannelOption.SO_BACKLOG :对应tcp/ip协议中的backlog参数,用来初始化服务器可连接队列大小。
  • ChannelOption.KEEP_ALIVE :保持连接活动状态

EventLoopGroup及其子类NioEventLoopGroup

EventLoopGroup
EventLoopGroup本质上是一个线程组,并且是可迭代的。
每次需要调用时,通过next获得一个EventExecutor执行。
在Server端需要两个EventLoopGroup,bossEventGroup负责接收连接,workEventGroup负责进行IO处理。

常用方法:

  • shutdownGracefully :断开连接,关闭线程

Upool


ByteBuf
类似于NIO中的ButeBuffer。但不同的是,ByteBuffer需要filp读写转换,而ByteBuf不需要。
原因是ByteBuf有readerIndex和writerIndex,分别记录下一个要读/写的位置。

0 <= readerIndex <= writerIndex <= capacity

		//ByteBuf buffer = Unpooled.copiedBuffer("hello,world", CharsetUtil.UTF_8);
		ByteBuf buffer = Unpooled.buffer(10);
        for (int i = 0; i < buffer.capacity(); i++) {
            buffer.writeByte(i);
        }
        for (int i = 0; i < buffer.capacity(); i++) {
            // getByte方法是根据下标读取,所以不会导致readerIndex+1
            // 而readByte可以
            System.out.println(buffer.readByte());
        }

常用方法

  • array : 获取array
  • readerIndex :获取readerIndex
  • readableBytes :剩余可读的数量(从readerIndex到writerIndex)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值