前语
实时通讯已经成为了移动运用程序不可或缺的一部分。无论是聊天运用、实时地图、在线游戏仍是IoT(物联网)设备的长途操控,都依赖于高功能的网络衔接来供给流通的用户体会。而正是在这个背景下,咱们有多个结构可供选择WebSocket,MQTT,Netty等**,而Netty靠着高功能**、可定制、可扩展、多协议等优势崭露头角,成为Android实时通讯首选东西之一。
Netty介绍
引证一段官方描绘
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.
Netty是 一个异步事情驱动的网络运用程序结构,用于快速开发可保护的高功能协议服务器和客户端。
Netty架构
该图是在官网主页的架构图。 红色的部分Transport Services传输服务:
- Socket(套接字)
- Datagram(数据报)
- Http Tunnel(HTTP地道)
橙色部分Protocol Support协议支撑:
- Http协议
- WebSocket
- SSL(安全套接字协议)
- 谷歌Protobuf协议
- zlib/gzip压缩与解压缩
- Large File Transfer大文件传输等等。
绿色的部分Core核心模块:
- 包含零复制
- API库
- 可扩展的事情模型。
以上可看出Netty的功用、协议、传输方法都比较全,比较强大。
Netty特性
Netty作为一款强大的网络运用程序结构,具备多项重要特性,包含但不限于以下内容:
- 异步和事情驱动:Netty选用异步、事情驱动的编程模型,答应开发者以非堵塞方法处理网络事情。这种模型进步了并发性和功能。
- 多协议支撑:Netty支撑多种网络通讯协议,包含WebSocket、TCP、UDP等。这使得它适用于不同类型的运用场景,从实时通讯到网络服务器都能够掩盖。
- 非堵塞I/O:Netty运用非堵塞的I/O操作,使得一个线程能够一起处理多个衔接的读写操作,而不会被堵塞。这进步了资源利用率和功能。
- 多路复用:Netty利用多路复用技能,能够运用少量的线程来办理多个通道的I/O事情。这减少了线程开支,进步了并发性。
- 线程池办理:Netty内部运用线程池来办理使命,如数据包的编解码、事情触发等。这使得它更加灵敏,能够根据负载情况动态分配资源,保证高并发功能。
- 内存办理优化:Netty选用了高效的内存办理技能,减少了内存分配和垃圾收回的开支,下降了推迟。
- 安全性:Netty供给了一系列的安全特性,包含SSL/TLS支撑、认证和授权机制,以保护网络通讯的安全性。
- 多种编解码器:Netty内置了各种编解码器,用于处理不同类型的数据格式,如JSON、Protobuf等,简化了数据的序列化和反序列化进程。
- 跨渠道性:Netty是一个跨渠道的结构,能够在不同操作系统上运转,无需修正代码。
- 扩展性:Netty的模块化结构和明晰的规划使得开发者能够轻松扩展结构,以满意特定运用的需求。
- 底层操控:Netty答应开发者对网络衔接进行底层操控,包含数据包的编解码、过错处理等。这使得开发者能够更精细地办理通讯进程,进一步优化功能。
为什么运用Netty
我觉得除了并发高、传输快、封装好之外最要害的是服务端与客户端通讯结构一致,一个一致的结构能够帮助咱们节省很多时间。
- 协议一致性:Netty答应开发者在服务端和客户端之间运用相同的通讯协议。这意味着您能够定义一套通用的协议规矩,然后在服务端和客户端上都运用相同的规矩进行数据传输。这种一致性有助于下降通讯过错和进步数据的牢靠性。
- 代码复用:经过运用相同的通讯结构,您能够重复运用许多通用的代码片段,然后减少了代码的重复编写。这使得开发更加高效,并减少了保护作业。
- 易于保护:由于服务端和客户端运用相同的结构,保护运用程序变得更加简略。您只需重视一套代码库,而不是别离保护两套不同的通讯代码。这下降了犯错的时机。
- 跨渠道兼容性:Netty是一个跨渠道的结构,能够在不同操作系统上运转。这意味着您能够编写一套代码,然后在多个渠道上部署它,无需进行大规模的修正。
- 功能优势:Netty是一个高功能的结构,适用于处理很多并发衔接。经过运用它,您能够保证服务端和客户端都具备卓越的功能,无论是处理大规模用户仍是设备衔接。
Netty为什么并发高
BIO(堵塞IO通讯方法) NIO(非堵塞IO通讯方法) 从这两图能够看出,BIO(Blocking I/O)和NIO(Non-blocking I/O)是两种不同的I/O模型,它们在处理输入和输出操作时有很大的区别:
-
堵塞(Blocking) vs. 非堵塞(Non-blocking):
- BIO:在BIO模型中,当一个线程履行I/O操作时,它会被堵塞,直到操作完结。这意味着一个线程只能处理一个衔接,如果有多个衔接,需求创立多个线程,这会导致资源糟蹋和功能下降。
- NIO:NIO模型选用非堵塞方法。一个线程能够一起处理多个衔接。当一个衔接上的I/O操作没有完结时,线程不会被堵塞,而是能够处理其他衔接。这进步了资源利用率和功能。
-
多线程 vs. 单线程:
- BIO:BIO一般运用多线程,每个衔接需求一个独立的线程来处理,这可能导致线程数的增加和资源耗费。
- NIO:NIO一般运用单线程或少量线程,经过事情循环**(Event Loop)**来办理多个衔接,减少了线程开支。
-
选择器(Selector):
- BIO:BIO不运用选择器,每个衔接一般对应一个线程。
- NIO:NIO运用选择器来监听多个通道的事情,当事情发生时,线程能够处理它们。这种机制进步了并发性。
-
功能:
- **BIO:**由于线程开支较高,功能一般较差,特别是在高并发情况下。
- NIO:NIO模型一般具有更好的功能,由于它更有效有利地势用了系统资源和处理多衔接。
Netty为什么传输快
传统数据复制 零复制
-
传统数据复制:
- 传统数据复制是指将数据从一个内存区域复制到另一个内存区域的操作。这一般涉及到两次数据传输:首先将数据从源内存复制到操作系统内核缓冲区,然后再从内核缓冲区复制到方针内存。
- 这种方法的长处是简略且易于实现,适用于大多数数据传输场景。
- 然而,传统数据复制需求额定的CPU和内存开支,由于数据需求在内核空间和用户空间之间进行复制。这可能会下降功能,特别是在很多数据传输时。
-
零复制:
- 零复制是一种优化数据传输的方法,它旨在减少量据复制的次数。在零复制中,数据能够直接从一个内存区域传输到另一个内存区域,而无需经过内核缓冲区。
- 零复制能够经过多种技能来实现,如文件映射(mmap)、直接内存访问(DMA)和用户空间缓冲区(user-space buffer)等。
- 这种方法减少了CPU和内存的开支,进步了数据传输的功率和功能。
- 零复制一般用于需求高功能和低推迟的运用,如网络数据传输、文件传输和多媒体处理。
Netty与OkHttp的区别
Netty和OkHttp是两个用于网络通讯的不同结构,它们在规划和用处上有一些重要区别:
-
用处:
- Netty:Netty是一个通用的网络运用程序结构,首要用于构建高功能的网络服务器和客户端运用。它支撑多种协议(如WebSocket、TCP、UDP等)和各种类型的网络运用,适用于实时通讯、在线游戏、物联网等多种范畴。
- OkHttp:OkHttp是一个专心于HTTP通讯的客户端库,用于履行HTTP请求和处理HTTP呼应。它首要用于Android运用程序中与Web服务器进行通讯,一般用于获取和发送数据,如JSON、XML或HTML。
-
协议支撑:
- Netty:Netty支撑多种网络通讯协议,包含WebSocket、TCP、UDP等。它是一个通用的网络结构,可用于处理各种协议和运用场景。
- OkHttp:OkHttp专心于HTTP协议,供给了强大的HTTP请求和呼应处理能力。虽然它能够用于WebSocket通讯,但它的首要规划方针是HTTP通讯。
-
并发功能:
- Netty:Netty是为高并发而规划的,选用了异步、事情驱动的编程模型,能够处理很多并发衔接,并保持低推迟。它适用于需求处理很多并发衔接的实时通讯运用。
- OkHttp:OkHttp相同具有杰出的功能,但它的首要焦点是HTTP通讯。它能够经过衔接池和异步请求来进步功能,但相对于Netty在处理并发衔接方面的灵敏性有所限制。
-
用法和API:
- Netty:Netty供给了丰厚的API和功用,用于构建底层的网络通讯,一起也需求更多的开发作业来处理协议和数据解析。
- OkHttp:OkHttp供给了简略且易于运用的API,专心于HTTP请求和呼应的处理。它一般用于构建根据HTTP的运用程序,无需过多的底层网络编程。
总结
Netty是一个根据Java NIO的异步事情驱动的网络运用程序结构,用于快速开发可保护的高功能服务器和客户端。在Android实时通讯中,运用Netty能够带来以下长处:
- 高效性:Netty选用异步非堵塞的I/O模型,能够处理很多并发衔接和请求,进步运用程序的功能和吞吐量。
- 牢靠性:Netty供给了多种编解码器和处理器,支撑对各种协议进行解析和编码,一起具有强大的过错处理机制,能够保证数据传输的准确性和牢靠性。
- 灵敏性:Netty供给了丰厚的API和东西,支撑自定义协议和扩展功用,能够根据实践需求进行灵敏的开发和定制。
- 易于运用:Netty的运用相对简略,学习曲线较平缓,开发人员能够快速上手并实现自己的运用程序。
综上所述,Netty是一个十分适合用于Android实时通讯的网络运用程序结构,能够帮助开发人员快速构建高功能、牢靠的实时通讯运用程序。
参阅
Netty: Home
文章引证图片来源于网络