netty 组件

2021-09-26 110

  • 既然提到服务器,就不得不提到几种服务器

以服务器使用的协议来区分:

  1. Http 服务器
  2. TCP 服务器
  3. UDP 服务器
  4. Redis 服务器
  5. Netty 服务器
  • 以前是传统的 HTTP 服务器
  1. 创建一个ServerSocket,监听绑定接口,大家来请求他
  2. 服务器使用 Accept,获得一个来自客户端的Socket 连接对象
  3. 启动一个新线程处理连接,进行循环进行解码编码序列化收发。
解释 例子
BIO 一个连接一个线程 一个线程停留在水壶那,直到烧开才走
NIO 一个请求一个线程,但是连接请求都会注册到多路复用器上 一个监听用的不断循环观察每一个水壶(就是串口select 方式)
AIO 一个有效请求一个线程 每个水壶装开关,当水开了再去叫对应线程

B(Block)IO: 一请求一应答
伪异步I/O编程:线程池管理
N(New)IO:同步非阻塞
A(Asynchronous )IO:异步

  • 基于Reactor模式:
    事件分发器。等待事件或者状态,如果有就传给事先注册的回调函数。

  • NIO组成:

  1. Buffer:与Channel交互,数据是从Channel
    读入缓冲区,从缓冲区写入Channel
  2. flip方法:反转此缓冲区,将position给limit,然后将position置0。(切换读写模式)
  3. clear方法:清除此缓冲区。将position置0,把capacity的值给limit
  4. rewind方法:重绕此缓冲区。
  5. Channel:IO与目标打开的连接
  6. Pipe:两个线程之间的单向数据连接,数据会被写到sink通道,从source通道读取。
  • 各种序列化方法
    Java:无法跨语言,序列化性能差
    XML:不能序列化方法。
    JSON:不适合性能为ms级别的情况。
    Fastjson:“假定有序快速匹配”算法。

为什么Netty使用NIO而不是AIO?
通俗地讲,Netty 能做什么?