Netty架构
Netty架构
Netty优秀的架构设计使其能够简单快速地构建网络应用程序,Netty的架构设计如下图所示:
Netty的整体架构分为Transport Services(传输服务层)、Protocol Support(传输协议层)和Core(核心层)3部分。
传输服务层
Transport Services指传输服务层,主要定义了数据的传输和通信方式,包括Socket And Datagram(Socket协议和数据包)、HTTP Tunnel(HTTP隧道)、In-VMPipe(本地传输管道)。
- 基于Socket的协议有TCP、UDP等。其中,TCP基于报文应答机制实现,主要用于可靠数据的传输,比如移动设备状态信息的传输。 UDP发出的数据不需要对方应答,主要用于对数据安全性要求不是很高但是对数据传输吞吐量要求较高的场景,比如实时视频流传输。
- HTTP Tunnel定义了HTTP的传输方式。
- In-VMPipe定义了本地数据的传输方式。
传输协议层
- Protocol Support指传输协议层,主要定义数据传输过程中的服务类型、数据安全、数据压缩等。具体包括HTTP And WebSocket(HTTP和WebSocket服务)、SSL And StartTLS(SSL 和StartTLS协议)、zlib/gzip Compression(zlib/gzip压缩算法)、Large File Transfer(大文件传输)、Google ProtoBuf(Google ProtoBuf格式)、RTSP(实时流传输协议)、Legacy Text And Binary Protocols(传统TXT和二进制数据)。
- HTTP和WebSocket服务定义了客户端和服务端的数据通信方式。HTTP服务基于HTTP实现,主要用于客户端主动向服务端发起数据包请求。WebSocket主要用于服务端基于消息推送的机制实时将数据包推送到客户端。
- SSL(Secure Sockets Layer,安全套接层)主要用于传输层与应用层之间的直接网络数据的加密,是为网络通信提供安全及数据完整性的一种安全协议。SSL包含记录层(Record Layer)和传输层(Transport Layer),记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方进行身份认证,最后交换对称密钥作为此次会话的密钥。基于该会话密钥来实现通信双方数据的加密,保证两个应用程序间通信的保密性和可靠性,使客户端与服务端的应用程序之间的通信不被攻击者窃听。
- StartTLS是一种明文通信协议的扩展,能够让明文的通信连线直接成为加密连线(使用SSL或TLS加密),而不需要使用另一个特别的端口来进行 加密通信,属于机会性 加密。StartTLS本身是一个与应用层无关的协议,可以搭配许多应用层协议一同使用。
- zlib/gzip Compression定义了消息传递过程中数据的压缩和解压缩算法,主要用于提高批量数据传输过程中网络的吞吐量。zlib是一种数据压缩格式,其使用抽象化的DEFLATE算法实现,应用十分广泛,Linux内核中使用zlib以实现网络协议的压缩、文件系统的压缩。OpenSSH、OpenSSL以zlib达到最优化的加密网络传输。gzip的基础也是DEFLATE算法,gzip也是一种数据压缩格式。
- Large File Transfer定义了大文件传输过程中数据的拆包和分发策略。
- Google ProtoBuf是Google发布的一款开源的数据传输格式和序列化框架。它是一种语言中立、平台无关、可扩展的序列化数据的格式,可用于通信协议、数据存储等。 在序列化数据方面,它提供了灵活高效的序列化实现。ProtoBuf很适合用于数据存储或RPC数据交换格式。
- RTSP(Real Time Streaming Protocol)为实时流传输协议,是一种网络应用协议,专为娱乐和通信系统使用,以控制流媒体服务器。该协议用于创建和控制终端之间的媒体会话。媒体服务器的客户端发布VCR命令,例如,播放、录制和暂停. 以便实时控制从服务器到客户端(视频点播)或从客户端到服务器(语音录音)的媒体流。
- Legacy Text And Binary Protocols提供了传统文本数据格式和二进制数据格式的传输支持。
核心层
Netty的Core(核心层)封装了Netty框架的核心服务和API,具体包括Extensible Event Model(可扩展事件模型)、Universal Communication API(通用通信协议API)、Zero-Copy-Capable Rich Byte Buffer(零拷贝字节缓冲区)等。
可扩展事件模型为Netty灵活的事件通信提供了基础;通用通信协议API为上层提供了统一的API访问入口,提高了Netty框架的易用性;零拷贝字节缓冲区为数据的快速读取和写入提供了保障。