netty 组件
2021-09-26 110
- 既然提到服务器,就不得不提到几种服务器
以服务器使用的协议来区分:
- Http 服务器
- TCP 服务器
- UDP 服务器
- Redis 服务器
- Netty 服务器
- 以前是传统的 HTTP 服务器
- 创建一个ServerSocket,监听绑定接口,大家来请求他
- 服务器使用 Accept,获得一个来自客户端的Socket 连接对象
- 启动一个新线程处理连接,进行循环进行解码编码序列化收发。
| 解释 | 例子 | |
|---|---|---|
| BIO | 一个连接一个线程 | 一个线程停留在水壶那,直到烧开才走 |
| NIO | 一个请求一个线程,但是连接请求都会注册到多路复用器上 | 一个监听用的不断循环观察每一个水壶(就是串口select 方式) |
| AIO | 一个有效请求一个线程 | 每个水壶装开关,当水开了再去叫对应线程 |
B(Block)IO: 一请求一应答
伪异步I/O编程:线程池管理
N(New)IO:同步非阻塞
A(Asynchronous )IO:异步
-
基于Reactor模式:
事件分发器。等待事件或者状态,如果有就传给事先注册的回调函数。 -
NIO组成:
- Buffer:与Channel交互,数据是从Channel
读入缓冲区,从缓冲区写入Channel - flip方法:反转此缓冲区,将position给limit,然后将position置0。(切换读写模式)
- clear方法:清除此缓冲区。将position置0,把capacity的值给limit
- rewind方法:重绕此缓冲区。
- Channel:IO与目标打开的连接
- Pipe:两个线程之间的单向数据连接,数据会被写到sink通道,从source通道读取。
- 各种序列化方法
Java:无法跨语言,序列化性能差
XML:不能序列化方法。
JSON:不适合性能为ms级别的情况。
Fastjson:“假定有序快速匹配”算法。