1、Netty通信与传统通信得区别:
read:传统数据拷贝:DMA传输--copy--页缓冲区--应用缓冲区buffer,
netty0拷贝:DMA传输--应用缓冲区buffer
write:传统数据拷贝:应用缓冲区--copy--socket缓冲区--DMA传输
netty0拷贝: 应用缓冲区--DMA传输
2、示意图(网上摘抄,很形象!)
理解:
-
Channel:一个客户端与服务器通信的通道(表示一个连接,可以理解为每一个请求,就是一个Channel)
-
ChannelHandler:业务逻辑处理器(核心处理业务就在这里,用于处理业务请求,业务逻辑都是存在于ChannelHandler)
- ChannelInboundHandler,输入数据处理器
- ChannelOutboundHandler,输出业务处理器
-
ChannelPipeline:用于存放ChannelHandler的容器(用于保存处理过程需要用到的ChannelHandler和ChannelHandlerContext)
-
ChannelContext:通信管道的上下文
-
ChannelHandlerContext:用于传输业务数据。
3、Http请求:
- HTTP Request 第一部分是包含的头信息
- HttpContent 里面包含的是数据,可以后续有多个 HttpContent 部分
- LastHttpContent 标记是 HTTP request 的结束,同时可能包含头的尾部信息
- 完整的 HTTP request,由1,2,3组成
- HTTP response 第一部分是包含的头信息
- HttpContent 里面包含的是数据,可以后续有多个 HttpContent 部分
- LastHttpContent 标记是 HTTP response 的结束,同时可能包含头的尾部信息
- 完整的 HTTP response,由1,2,3组成
4、Netty客户端和服务端的时序图:
(1)客户端:
(2)服务器端:
声明:所有文章均是为本人学习所用,图片多有摘抄,仅便于个人学习!