1.Netty是由JBOSS提供的一个java开源框架

(1)本质:JBoss做的一个Jar包,一个好使的处理Socket的框架
 (2)目的:快速开发高性能、高可靠性的网络服务器和客户端程序
 (3)优点:提供异步的、事件驱动的网络应用程序框架和工具

2.Netty简介

(1)Netty本身就是一个高性能、异步事件驱动的NIO框架
   <1>提供了对TCP、UDP和文件传输的支持
   <2>封装了Java NIO那些复杂的底层细节,提供简单好用的抽象概念
(2)首先它是个框架,是个“半成品”,不能开箱即用
   <1>必须得拿过来做点定制,利用它开发出自己的应用程序,然后才能运行
   <2>如果应用根本没有高并发的压力,那就不一定要用Netty了

3.Netty的特点

(1)高并发
    <1>Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架
    <2>对比于BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高 
(2)传输快
    <1>Netty的传输快其实也是依赖了NIO的一个特性——零拷贝
(3)封装好
    <1>Netty封装了NIO操作的很多细节,提供易于使用的API

4.Netty的架构设计

(1)总体结构:Netty 采用了比较典型的三层网络架构进行设计
    <1>传输服务:支持 BIO 和 NIO
    <2>容器集成:支持 OSGI、JBossMC、Spring、Guice 容器
    <3>协议支持:HTTP、Protobuf、二进制、文本、WebSocket 等一系列常见协议都支持
        3.1.还支持通过实行编码解码逻辑来实现自定义协议
    <4>Core 核心:可扩展事件模型、通用通信 API、支持零拷贝的 ByteBuf 缓冲对象

5.Netty的高性能设计

(1)高性能的三大要素:
    <1>传输/IO模型:用什么样的通道将数据发送给对方,BIO、NIO或者AIO
         1.1.IO模型在很大程度上决定了框架的性能
         1.2.Netty的I/O模型基于非阻塞I/O实现,底层依赖的是JDK NIO框架的Selector
    <2>协议:采用什么样的通信协议,HTTP或者内部私有协议
         2.1.协议的选择不同,性能模型也不同
         2.2.相比于公有协议,内部私有协议的性能通常可以被设计的更优  
    <3>Reactor线程模型:Reactor线程模型的不同,对性能的影响也非常大
         3.1.Reactor单线程模型
             3.1.1.指的是所有的I/O操作都在同一个NIO线程上面完成
             3.1.2.对于一些小容量应用场景,可以使用单线程模型
         3.2.Reactor多线程模型
             3.2.1.Rector多线程模型与单线程模型最大的区别就是有一组NIO线程处理I/O操作
             3.2.2.主要用于高并发、大业务量场景   
         3.3.主从Reactor多线程模型   
             3.3.1.特点是服务端用于接收客户端连接的是一个独立的NIO线程池   
             3.3.2.可以解决1个服务端监听线程无法有效处理所有客户端连接的性能不足问题
(2)Netty的线程模型
   <1>Netty的线程模型是去掉线程池的第三种形式的变种
   <2>这也是Netty NIO的默认

6.Netty的核心组件

(1)Bootstrap or ServerBootstrap
   <1>一个Netty应用通常由一个Bootstrap开始
   <2>它主要作用是配置整个Netty程序,串联起各个组件
(2)ChannelInboundHandler
  <1>一个最常用的Handler,处理接收到数据时的事件   
  <2>业务逻辑一般就是写在这个Handler里面的
  <3>ChannelInboundHandler就是用来处理核心业务逻辑
(3)ChannelInitializer
  <1>当一个链接建立时,有各种各样的Handler实现来处理它  
  <2>ChannelInitializer便是用来配置这些Handler
  <3>它会提供一个ChannelPipeline,并把Handler加入到ChannelPipeline
(4)ChannelPipeline
  <1>一个Netty应用基于ChannelPipeline机制
  <2>这种机制需要依赖于EventLoop和EventLoopGroup
  <3>它们三个都和事件或者事件处理相关 
(5)EventLoops/EventLoopGroup
  <1>目的是为Channel处理IO操作
  <2>一个EventLoop可以为多个Channel服务
  <3>EventLoopGroup会包含多个EventLoop  
(6)Channel
  <1>代表了一个Socket链接,或者其它和IO操作相关的组件
  <2>它和EventLoop一起用来参与IO处理
(7) Future or ChannelFuture
  <1>在Netty中所有的IO操作都是异步的,因此,不能立刻得知消息是否被正确处理
  <2>但是可以过一会等它执行完成或者直接注册一个监听
  <3>具体的实现就是通过Future和ChannelFutures
  <4>他们可以注册一个监听,当操作执行成功或失败时监听会自动触发
  <5>所有的操作都会返回一个ChannelFuture

7.Netty的应用场景

(1)互联网行业
   <1>Dubbo协议默认使用Netty作为基础通信组件,用于实现各进程节点之间的内部通信
   <2>淘宝消息中间件RocketMQ生产者和消费者之间,也采用Netty进行高性能、异步通信
(2)游戏行业
   <1>方便定制和开发私有协议栈,账号登录服务器,地图服务器之间通过Netty进行高性能的通信
(3)大数据领域 
   <1>经典的Hadoop的高性能通信和序列化组件Avro的RPC框架,默认采用Netty进行跨界点通信
   <2>它的Netty Service基于Netty框架二次封装实现