清凤

导航

 

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

3.1 Channel  EventLoop 和 ChannelFuture

3.1.1  Channel

Channel --Socket---连接----四元组

Channel 类型: 从服务器端和客户端来分 NioServerSocketChannel   NioSocketChannel

                          从协议类型来说: OioServerSocketChannel  NioSocketChannel  NioDatagramChannel  EmbeddedChannel

Channel 的主要方法: bind()   connect()   read()   write()   flush()

 

 3.1.2  EventLoop 

  • NioEventLoopGroup 实际上就是个线程池,一个 EventLoopGroup 包含一个或者多个 EventLoop;
  • 一个 EventLoop在它的生命周期内只和一个 Thread绑定;
  • 所有有 EnventLoop 处理的 I/O 事件都将在它专有的 Thread 上被处理;
  • 一个 Channel 在它的生命周期内只注册于一个 EventLoop;
  • 每一个 EventLoop 负责处理一个或多个 Channel;

 

 从类结构可知,NioEventLoopGroup是一个Schedule类型的线程池,线程池中的线程用数组存放,EventLoopGroup(其实是MultithreadEventExecutorGroup) 内部维护一个类型为 EventExecutor children 数组, 其大小是 nThreads, 这样就构成了一个线程池,线程池大小通过在实例化 NioEventLoopGroup 时, 如果指定线程池大小, 则 nThreads 就是指定的值, 反之是处理器核心数 * 2;

 

 3.1.3 ChannelFuture 

Netty 中所有I/O操作都是异步的,因为一个操作可能不会立即返回,所以我们需要一种用于在之后的某个时间点确定其结果的方法,所以Netty提供了ChannelFuture接口

ChannelFuture 主要的方法 get()  sync() cancel()  addListener()

 

 3.2  ChanelHandler 和 ChannelPipeline

3.1 ChannelHandler 

从应用程序开发人员的角度来讲,Netty的主要组件是ChannelHandler,它充当了所有处理入站和出站数据的应用程序逻辑的容器。 

3.2 ChannelPipeline 

 ChannelPipeline 是可以为 ChannelHandler 编排顺序

 

posted on 2021-01-08 13:42  清凤  阅读(110)  评论(0编辑  收藏  举报