netty学习(二) 官网的解读

https://netty.io/3.8/guide/#architecture

官方文档非常有意思, 他为了偷懒(起码我是这么觉得,在spring就没看到类似的骚操作),4.1把基础的原理部分直接引用了3.8的.

第2章。架构概述
目录

1.丰富的缓冲区数据结构
1.1。 合并和切片ChannelBuffer
2.通用异步I / O API
3.基于拦截器链模式的事件模型
4.高级组件,实现更快的开发
4.1。 编解码器框架
4.2。 SSL / TLS支持
4.3。 HTTP实现
4.4。 WebSockets实现
4.5。 Google Protocol Buffer Integration
5.总结

The Architecture Diagram of Netty

在本章中,我们将研究Netty提供了哪些核心功能,以及它们如何构成核心顶部的完整网络应用程序开发堆栈。 阅读本章时,请牢记此图。

还请记住,许多详细文档位于javadoc中。 请单击指向类名和包名的链接。

以下引用文献https://zhuanlan.zhihu.com/p/48088093

 

先从下面的core层即核心特点看起:

1.零拷贝 参考:Netty中的零拷贝 传统的零拷贝可以这样理解,比如要把数据从A拷贝到C这里,本来是需要把A先拷贝到B,然后再从B拷贝到C的。但是使用零拷贝后就直接从A拷贝到C了。也就是说减少了拷贝的次数,增加了效率。在netty中就是在socket通道的写入和读取的时候没有拷贝,而传统的是需要拷贝的。

2.统一通信的API 意思就是说在jdk里面用了几套api来封装对网络io的操作,有nio,bio,aio。而在netty中只用了一套的API就封装了全部的操作,只要传入的参数不同,调用的方法不同即可使用不同的io。

3.可扩展的事件模型。 netty是使用事件来进行驱动的。

然后看上面的3层,从上往下看是socket ,http,in-vm pipe。http也是基于socket的,in-vm pipe是jvm的一种进程。 http就支持文件压缩,大文件传输,rtsp是一种实时的流传输协议。

 

然后netty的逻辑架构又分为三层: 参考:一篇文章,读懂 Netty 的高性能架构之道

如果不理解没关系,写多了代码之后自然再来看看就很容易理解了。

第一层:Reactor 通信调度层。该层的主要职责就是监听网络的读写和连接操作,负责将网络层的数据 读取到内存缓冲区中,然后触发各种网络事件,例如连接创建、连接激活、读事 件、写事件等等,将这些事件触发到 PipeLine 中,由 PipeLine 充当的职责链来 进行后续的处理

第二层:职责链 PipeLine。它负责事件在职责链中的有序传播,同时负责动态的 编排职责链,职责链可以选择监听和处理自己关心的事件,它可以拦截处理和向 后/向前传播事件

第三层:业务逻辑处理层,可以分为两类:

  1. 纯粹的业务逻辑 处理,例如订单处理。
  2. 应用层协议管理,例如HTTP协议、FTP协议

这里有一篇文献我觉得还是很好的

https://blog.csdn.net/u012562943/article/details/52849302

Netty架构分析

Netty 采用了比较典型的三层网络架构进行设计,逻辑架构图如下所示:

第一层:Reactor 通信调度层,它由一系列辅助类完成,包括 Reactor 线程 NioEventLoop 以及其父类、NioSocketChannel/NioServerSocketChannel 以及其父 类、ByteBuffer 以及由其衍生出来的各种 Buffer、Unsafe 以及其衍生出的各种内 部类等。该层的主要职责就是监听网络的读写和连接操作,负责将网络层的数据 读取到内存缓冲区中,然后触发各种网络事件,例如连接创建、连接激活、读事 件、写事件等等,将这些事件触发到 PipeLine 中,由 PipeLine 充当的职责链来 进行后续的处理。

第二层:职责链 PipeLine,它负责事件在职责链中的有序传播,同时负责动态的 编排职责链,职责链可以选择监听和处理自己关心的事件,它可以拦截处理和向 后/向前传播事件,不同的应用的 Handler 节点的功能也不同,通常情况下,往往 会开发编解码 Hanlder 用于消息的编解码,它可以将外部的协议消息转换成内部 的 POJO 对象,这样上层业务侧只需要关心处理业务逻辑即可,不需要感知底层 的协议差异和线程模型差异,实现了架构层面的分层隔离。

第三层:业务逻辑处理层,可以分为两类:

  1. 纯粹的业务逻辑 处理,例如订单处理。

  2. 应用层协议管理,例如HTTP协议、FTP协议等。

接下来,我从影响通信性能的三个方面(I/O模型、线程调度模型、序列化方式)来谈谈Netty的架构。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值