Netty

Netty

JBoos提供的基于NIO的异步非阻塞框架

线程模型

单线程模型
用一个线程通过多路复用实现所有的IO请求,可支持的并发量较弱
线程池模型
服务端采用一个线程专门处理客户端的连接请求,采用一个线程组负责IO操作
Netty模型

Netty抽象出两组线程池,BossGroup专门负责客户端的连接,WorkerGroup专门负责网络读写操作。NioEventLoop表示一个不断循环处理任务的线程,每个NioEventLoop都有一个selector。用于监听绑定在其上的socket网络通道,内部采用串行化设计,从消息的读取->解码->处理->编码->发送,始终由NioEventLoop负责

  • 一个NioEventLoopGroup包含多个NioEventLoop
  • 每个NioEventLoop包含一个Selector和taskQueue
  • 每个NioEventLoop上的Selector都会监听多个NioChannel
  • 每个NioChannel只会绑定在一个NioEventLoop上

异步模型

FUTURE,CALLBACK和HANDLER

Netty的异步模型是建立在future和callback上的,目的是为了使业务代码从网络基础应用编码中脱离出来

核心API

  • ChannelHandler 通道状态类

    方法描述
    public void channelActive(ChannelHandlerContext ctx)通道就绪事件
    public void channelRead(ChannelHandlerContext ctx,Object msg)通道读取数据事件
    public void channelReadComplete(ChannelHandlerContext ctx)数据读取完毕事件
    public void exceptionCaught(ChannelHandlerContext ctx,Throwable cause)通道异常事件
  • Pipeline和ChannelPipeline

    ChannelPipeline是Handler的集合,负责处理、拦截inbound和outbound的事件和操作,相当于一个链
    方法描述
    ChannelPipeline addFirst(ChannelHandler handler)把一个业务处理类添加到链中的第一个位置
    ChannelPipeline addLast(ChannelHandler handler)把一个业务处理类添加到链中的最后一个位置
  • ChannelHandlerContext

    事件上下文处理对象,pipeline中的实际处理节点,每一个ChannelHandlerContext中包含一个具体的事件处理器ChannelHandler,同时也绑定了Pipeline和Channel的信息。
  • ChannelOption 是Socket的标准参数类

  • ChannelFuture 表示IO中的异步操作结果

    Channel channel() 返回正在进行IO操作的channel

    ChannelFuture sync() 等待异步操作执行完毕

  • EventLoopGroup和其实现类NioEventLoopGroup

    服务器一般提供两个EventLoopGroup 例如BossEvenetLoop和WorkerEventLoop

    public Future<?> showdownGracfully() 断开连接,关闭线程

  • ServerBootstrap和Bootstrap

    ServerBootstrap是服务端的启动助手,Bootstrap是客户端的启动助手
    方法描述
    public ServerBootstrap group(EventLoopGroup parentGroup,EventLoopGroup childGroup)用于服务端,设置两个EvenetLoop
    public B group(EventLoopGroup group)用于客户端,设置一个EventLoop
    public B channel(Class<? extends C> channelClass)用于设置服务端的一个channel实现
    public<T> B option(ChannelOption<T> option,T value)用来给ServerChannel添加配置
    public<T> ServerBootstrap childOption(ChannelOption<T> childOption,T value)用来给接收到的通道添加配置
    public ServerBootstrap childHandler(ChannelHandler childHandler)用来设置业务处理类
    public ChannelFuture bind(int inetPort)设置服务器端占用的端口号
    public ChannelFuture connect (String inetHost,int inetPort)用于客户端,用来连接服务器
  • Unpooled 操作缓冲区的类

    public static ByteBuf copiedBuffer(CharSequence string,Charset charset) 通过给定的数据和字符编码返回一个ByteBuf对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值