zoukankan      html  css  js  c++  java
  • Netty 基本概念

    从高层次的角度来讲,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 编排顺序

  • 相关阅读:
    工具.MySQL
    SqlServer.日期时间格式化输出(资料)
    SqlServer2012.安装
    SQL.【转】获取存储过程返回值的几种方式
    SQL.【转】SqlServer如何获取存储过程的返回值
    SQL.@,@@、#,##
    Oracle10g.CentOS6安装_遇到的问题(02)
    jQuery FileUpload 插件[转]
    EF6+Oracle12c+DBFirst+VS2015:EF6.0添加实体模型闪退问题解决
    IIS
  • 原文地址:https://www.cnblogs.com/Ivyduan/p/14167074.html
Copyright © 2011-2022 走看看