1.Netty的介绍
(1) Netty是由JBOSS提供的一个Java开源框架,现在为Github上的独立项目。
(2) Netty是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠的网络IO程序。
(3) Netty主要针对于TCP协议下,面向Client客户端高并发应用,或者PeerToPeer,场景下的大量数据持续传输的应用。
(4) Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场景。
(5) Netty框架如果要彻底理解透彻,需要先学习NIO,这样子会对我们认识Netty的原理和运作模式会有很大的帮助。
2.Netty的应用场景
(1)互联网行业
分布式系统中,各个节点之间需要远程服务调用,高性能的RPC框架中,Netty作为异步话性能的通信框架,往往作为基础的通信组件被这些RPC框架使用。
典型的应用:Dubbo、ElasticSearch,Dubbo通信传输机制,默认采用的就是Netty做为基础的通信组件,用于个进程节点之间的内部通信。
(2)游戏行业
无论是手机游戏或者大型的网络游戏,Java语言得到了越来越广泛的应用。
Netty作为高性能的通信组件,提供了TCP/UDP和HTTP协议栈,方便定制和开发私有协议栈,账号登陆服务器。
地图服务器之间可以方便的通过Netty进行高性能的通信。
(3)大数据领域
经典的Hadoop的高性能通信和序列化组件(AVRO实现数据文件共享)的RPC框架,采用Netty进行跨界点通信。
他的实现Netty Service基于Netty框架进行二次封装。
(4) 其它开源项目
3.Netty的层次关系
Netty本身为应用层级别->基于Java-NIO服务应用API->基于原生JDK-IO网络模型Linux(epoll/evport/selector/kequeue)不同的操作系统支持的函数库不同,但是理论实现方式大同小异。
4.目前网络所支持IO模型
(1) BIO模型:同步阻塞机制,服务器实现模式为一个连接一个线程,即客户端由链接请求是服务端需启动一个线程进行处理,如果这个链接不做任何事情会造成不必要的线程开销。
(2) NIO模型:同步非阻塞机制,服务器实现模式为一个线程处理多个请求(连接),即客户端发送连接请求都会注册到了一个多路复用器,多路复用器轮询到连接由IO请求进行处理。
(3)NIO2(AIO)异步非阻塞,AIO引用了一部通道的概念,采用了Proactor模型,简化了变成模型,有效的请求后才会启动线程,特点就是现有操作系统完成后在通知服务端区处理请求,一般用于连接较长连接较多的应用场景。