Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。
Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化了TCP
和UDP套接字服务器等网络编程。“快速简单”并不意味着最终的应用程序会受到可维护性或性能问题的影响。Netty经过精心设计,具有丰富的协议,如FTP,SMTP,HTTP以及各种二进制和基于文本的传统协议。 因此,Netty成功地找到了一种在不妥协的情况下实现易于开发,性能,稳定性和灵活性的方法。
特征
设计
- 适用于各种传输类型的统一API - 阻塞和非阻塞套接字
- 基于灵活且可扩展的事件模型,可以清晰地分离关注点
- 高度可定制的线程模型 - 单线程,一个或多个线程池,如SEDA详情
- 真正的无连接数据报套接字支持(自3.1起)【注①】
使用简单
- 详细齐全的Javadoc,用户指南和示例
- 没有其他依赖项,JDK 5(Netty 3.x)或6(Netty 4.x)就足够了
。注意:某些组件(如HTTP/2)可能有更多要求。有关更多信息,请参阅the Requirements page页面。
性能
- 高吞吐量,低延迟
- 减少资源消耗
- 最小化不必要的内存复制
安全
- 完整的SSL/TLS和StartTLS支持
社区
- 早发布,经常发布
- 自2003年以来,作者一直在编写类似的框架,他依然觉得你的反馈很珍贵!
框架图
传输服务
- Socket & DatagramSocket
- Http Tunnel(http隧道)
- In-VM pipe(虚拟机内的管道)
协议支持
- Http&WebSocket
- SSL&StartTLS(加密协议)
- Google Protobuf(google开源的序列化协议)
- zlib/gzip Compression(压缩格式)
- LargeFile Transfer(支持大文件传输)
- RTSP(位于应用层的多媒体 实时流传输协议)
Legacy Text.Binary Protocols with Unit Testability(传统的文本。具有单元可测试性的二进制协议)
核心
- Extensible Event Model(可的扩展事件模型)
- Universal Communication API(通用通信API)
- Zero-Copy-Capable Rich Byte Buffer(具有零拷贝功能的富字节缓冲区)【注②】
注释
①套接字分为——面向连接的套接字和无连接的套接字
- 面向连接的套接字:提供了一个面向连接、可靠的数据传输服务,数据传输之前需要在发送端与接收端之间建立可靠连接,确定双方通信无碍。数据无差错(不丢包)、无重复地发送,且按发送顺序接收。内设流量控制,避免数据流超限(滑动窗口协议),数据被看作是字节流,无长度限制。TCP(传输控制协议)、FTP(文件传送协议)即使用流式套接(SOCK_STREAM)。
- 无连接的套接字:提供了一个无连接服务,发送方只需要知道接收方的的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。UDP(用户数据报协议)、NFS(网络文件系统)使用数据报式套接字(SOCK_DGRAM)。
推荐阅读5分钟读懂tcp协议
②Zero-Copy:指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。零复制操作减少了在用户空间与内核空间之间切换模式的次数。(详情)
参考:
https://netty.io/
①https://github.com/mdwelsh/mdwelsh.github.io/blob/master/papers/seda-sosp01.pdf
②:https://blog.csdn.net/qq_19408603/article/details/74612484