Netty学习记录-入门篇( 三 )


  • Netty中的I/O操作是异步的 , 包括Bind、Write、Connect等操作会简单的返回一个 ChannelFuture
  • 调用者不能立刻获得结果,而是通过 Future-Listener机制 , 用户可以方便地主动获取或者通过通知机制获得I/O操作结果 。
  • Netty的异步模型是建立在future和callback(回调)之上的 。重点是future,它的核心思想:假设一个方法func,计算过程可能非常耗时 , 等待func返回显然不合适 。那么在 调用func的时候,立刻返回一个future,后续可以
    通过future去监控方法func的处理过程(即:Future-Listener机制)
    • ChannelFuture是一个接口:Public interface ChannelFuture extends Future
    • 可以添加监听器,当监听的事件发生时,就会通知到监听器 。
  • 在使用Netty进行编程时,拦截操作和转换出入站数据只需要你提供callback或利用future即可 。这使得链式操作简单、高效、并有利于编写可重用、通用的代码 。
  • Future-Listener机制当Future对象刚刚创建好时 , 处于非完成状态,调用者可以通过返回的channelFuture来获取操作执行的状态,注册监听函数来执行完成后的操作 。
    常见的操作:
    - 通过 isDone 方法来判断当前操作是否完成 。- 通过 isSuccess 方法来判断已完成的当前操作是否成功 。- 通过 getCause 方法来获取已完成的当前操作失败的原因 。- 通过 isCancelled 方法来判断已完成的当前操作是否被取消 。- 通过 addListener 方法来注册监听器,当操作已完成(isDone) , 将会通知指定的监听器 。小结:相比于传统阻塞I/O , 执行I/O操作后线程会被阻塞?。钡讲僮魍瓿?。异步处理的好处是不会造成线程阻塞,线程在I/O操作期间可以执行别的程序 , 在高并发情形下会 更稳定和更高的吞吐量 。
    Netty 核心模块组件ServerBootstrap、BootstrapBootstrap意思是引导,一个Netty应用通常由一个Bootstrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中Bootstrap类是客户端程序的启动引导类,ServerBootstrap是服务器启动引导类 。
    常用方法:
    - public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup):用于服务器端,用来设置两个EventLoop- public B group(EventLoopGroup group):该方法用于客户端,用来设置一个EventLoop- public B channel(Class<? extends C> 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):用于客户端 , 用来连接服务器端Future、ChannelFutureNetty中所有的IO操作都是异步的,不能立刻得知消息是否被正确处理 。但是可以过一会等它执行完成或者直接注册一个监听,具体的实现就是通过Future和ChannelFuture ,  他们可以注册一个监听,当操作执行成功或失败时监听会自动触发注册的监听事件
    常用的方法:
    - Channel channel():返回当前正在进行IO操作的通道- ChannelFuture sync():等待异步操作执行完毕ChannelNetty网络通信的组件 , 能够用于执行网络 I/O 操作 。通过 Channel 可获得当前网络连接的通道的状态 。通过 Channel 可获得 网络连接的配置参数 (例如接收缓冲区大?。?。Channel 提供异步的网络 I/O 操作(如建立连接,读写,绑定端口),异步调用意味着任何 I/O 调用都将立即返回,并且不保证在调用结束时所请求的 I/O 操作已完成 调用立即返回一个 ChannelFuture实例 , 通过注册监听器到ChannelFuture上,可以 I/O 操作成功、失败或取消时回调通知调用方 。不同协议、不同的阻塞类型的连接都有不同的 Channel 类型与之对应,常用的 Channel 类型:
    - NioSocketChannel,异步的客户端 TCP Socket 连接 。- NioServerSocketChannel,异步的服务器端 TCP Socket 连接 。- NioDatagramChannel,异步的 UDP 连接 。- NioSctpChannel,异步的客户端 Sctp 连接 。- NioSctpServerChannel,异步的 Sctp 服务器端连接,这些通道涵盖了 UDP 和 TCP 网络 IO 以及文件 IO 。

    推荐阅读