[[Netty]]

  • Fature、ChannelFuture说明
    • 常见方法:
      • Channel channel(),返回当前正在进行 IO 操作的通道
      • ChannelFuture sync(),等待异步操作执行完毕
    • 表示异步执行的结果,可以通过它提供的方法来检测执行是否完成,比如检索计算等等
    • ChannelFuture是一个接口:public interface ChannelFuture extends Future我们可以添加监听器,当监听事件发生时,就会通知到监听器
    • 在使用Netty编程时,拦截操作和转换出入栈数据只需要提供callback或利用future即可,这使得链式操作简单、高效,并有利于编写可重用的、通用的代码
    • 当Future对象刚刚创建时,处于非完成状态,调用者可以通过返回的ChannelFuture来获取操作执行的状态,注册监听函数来执行完成后的操作,常见有如下操作
      • 通过 isDone 方法来判断当前操作是否完成
      • 通过 isSuccess 方法来判断已完成的当前操作是否成功
      • 通过 getCause 方法来获取已完成的当前操作失败的原因
      • 通过 isCancelled 方法来判断已完成的当前操作是否被取消
      • 通过 addListener 方法来注册监听器,当操作已完成(isDone 方法返回完成),将会通知指定的监听器;如果 Future 对象已完成,则通知指定的监听器

  • Bootstrap、ServerBootstrap
    • Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类
    • 常见的方法有
      • public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup),该方法 用于服务器端,用来设置两个 EventLoop
      • public B group(EventLoopGroup group) ,该方法用于客户端,用来设置一个 EventLoopGroup
      • public B channel(Class channelClass),该方法用来设置一个服务器端的通道实现
      • public B option(ChannelOption option, T value),用来给 ServerChannel 添加配置
      • public ServerBootstrap childOption(ChannelOption childOption, T value),用来给接收到的 通道添加配置
      • public ServerBootstrap childHandler(ChannelHandler childHandler),该方法用来设置业务处理类 (自定义的 handler)
      • public ChannelFuture bind(int inetPort) ,该方法用于服务器端,用来设置占用的端口号
      • public ChannelFuture connect(String inetHost, int inetPort) ,该方法用于客户端,用来连接服务器

  • Channel
  • Netty网络通信组件,能够用于执行网络IO操作
  • 通过Channel可获得当前网络连接的通道状态
  • 通过Channel可获得网络连接的配置参数(例如:接收缓冲区大小)
  • Channel提供异步的网络IO操作(如建立连接,读写,绑定端口),异步调用意味着任何IO调用都将立即返回,并且不保证在调用结束时所请求的IO操作已完成
  • 调用立即返回一个ChannelFuture实例,通过注册监听器到ChannelFuture上,可以IO操作成功、失败或取消时回调通知调用方
    • NioSocketChannel,异步的客户端 TCP Socket 连接。
    • NioServerSocketChannel,异步的服务器端 TCP Socket 连接。
    • NioDatagramChannel,异步的 UDP 连接。
    • NioSctpChannel,异步的客户端 Sctp 连接。
    • NioSctpServerChannel,异步的 Sctp 服务器端连接,这些通道涵盖了 UDP 和 TCP 网络 IO 以及文件 IO。

  • Selector
  • Netty基于Selector对象实现IO多路复用,通过Selector一个线程可以监听多个连接的Channel事件
  • 当向一个Selector中注册Channel后,Selector内部的机制就可以自动不断地查询(Select)这些注册的Channel是否有已就绪的IO事件(例如:可读,可写,网络连接完成等),这样程序就可以简单的使用一个线程高效的管理多个Channel