netty相关

同步阻塞式IO(BIO)

BIO主要的问题在于每次有一个新的客户端接入的时候,服务端必须创建一个新的线程处理新接入的链路,一个线程只能处理一个客户端连接

伪异步I/O模型

伪异步I/O使用了线程池实现,避免了为每一个请求创建一个独立线程,而造成资源耗尽的问题,但是还是有问题,线程池采用阻塞队列实现,队列积满之后,后续入队列将会被阻塞

NIO(New-I/O或者Non-BlOCK I/O)

1、缓冲区buffer

​ 在NIO的库中,所有的数据都是通过缓冲区来处理的,在读取数据时候,他是直接读到缓冲区的,包含:ByteBuffer、CharBuffer、ShotBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer,都是实现Buffer接口

2、Channel通道

​ 就像一个自来水管一样,网络数据通过Channel读取和写入,通道是双向的,流只是在一个方向上移动,channel是全双工通信,能够同时支持读写操作

3、多路复用器Selector

AIO(NIO异步通道)

是真正的异步非阻塞IO,对于时间驱动AIO,

TCP

TCP发生拆包粘包情况

1、应用程序write写入字节大小大于套接扣发送缓冲区大小

2、进行MSS(是网络传输数据最大值)大小的TCP分段

3、以太网帧的payload(有效载荷:在一个数据包或者其它传输单元中运载的基本必要数据,httppost的有效数据)大于MTU(最大传输单元)进行IP分片

Share