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 编排顺序

  • 相关阅读:
    【CF103D】Time to Raid Cowavans-分块+离线处理
    【BZOJ3992】序列统计(SDOI2015)-NTT+循环卷积+快速幂
    【BZOJ3527】力(ZJOI2014)-FFT
    【HDU4609】3-idiots-FFT+生成函数
    【LuoguP3803】多项式乘法-FFT/NTT模板题(附带FFT/NTT简单介绍)
    网络流24题解题总结(更新中)
    【BZOJ3531】旅行(SDOI2014)-树链剖分+动态加点线段树
    [Noip2012]借教室
    bzoj3394:[Usaco2009 Jan]Best Spot 最佳牧场
    [NOIP2014]无线网站发射器选址
  • 原文地址:https://www.cnblogs.com/Ivyduan/p/14167074.html
Copyright © 2011-2022 走看看