netty(二)--Channel、 EventLoop 和 ChannelFuture;ChannelHandler和ChannelPipeline简述

  netty解决了技术的和体系结构的领域的问题。首先,它的基于Java NIO的异步的和事件驱动的实现,保证了高负载下应用程序性能的最大化和可伸缩性。其次,netty也包含了一组设计模式,将应用程序逻辑从网络层解耦,简化了开发过程,同时也最大限度地提高了可测试性、模块化及代码的可重用性。

  • Channel – Socket
  • EventLoop – 控制流、多线程处理、并发
  • ChannelFuture – 异步通知

Channel接口
  基本的I/O操作(bind()、connect()、read()和writer())。
  EventLoop定义了Netty的核心抽象,用于处理连接的生命周期中所发生的事件。在这里插入图片描述
这些关系是:

  • 一个EventLoopGroup包含一个或者多个EventLoop
  • 一个EventLoop在它的生命周期中只和一个Thread绑定
  • 所有的EventLoop处理的I/O事件都将在它专有的Thread上被处理
  • 一个Channel在它的生命周期中只注册于一个EventLoop
  • 一个EventLoop可能会分配给一个或者多个Channel
    ChannelFuture接口
      netty中所有的I/O操作都是异步的。因为一个操作可能不会立即返回,所以我们需要一种用于在之后的某个时间点确定其结果的方法。为此, Netty 提供了
    ChannelFuture 接口,其 addListener()方法注册了一个 ChannelFutureListener,以便在某个操作完成时(无论是否成功)得到通知。

ChannelHandler接口
  对于应用程序开发人员来说,netty主要组件就是ChannelHandler,它充当了所有处理入站和出站数据的应用程序逻辑的容器。

ChannelPipeline接口
  ChannelPipeline提供了ChannelHandler链的容器,并定义了在该站上传播入站和出战事件流的API。当Channel被创建时,它会被自动分配到它专属的ChannelPipeline。
  ChannelHandler 安装到 ChannelPipeline 中的过程如下所示:

  • 一个ChannelInitializer的实现被注册到了ServerBootstrap中
  • 当ChannelInitializer.initChannel方法被调用时ChannelInitializer会在ChannelPipeline中安装一组自定义的ChannelHandler
  • ChannelInitializer将自己从ChannelPipeline中移除

下面这些是编写自定义 ChannelHandler 时经常会用到的适配器类:
 ChannelHandlerAdapter
 ChannelInboundHandlerAdapter
 ChannelOutboundHandlerAdapter
 ChannelDuplexHandler

猜你喜欢

转载自blog.csdn.net/ljz2016/article/details/82801188