1.简介
1. netty是JBOSS提供的一个开源框架,现为github的独立项目
2.Netty是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络IO程序
3.Netty主要针对在TCP协议下,面向clients端的高并发应用,或者Peer-to-Peer场景下的大量数据持续传输的应用
4.Netty本身是一个NIO框架,适用于服务器通讯的多种场景
2. 应用场景
1》分布式系统中,各个服务间需要远程过程调用,Netty往往作为基础通讯组件被RPC调用,比如DUBBO
2》游戏行业,可以感知用户间信息
3》地图服务器可以通过Netty进行高性能的通信。
3. IO模型
1》IO模型可以简单的理解为用什么样的通道进行数据的发送和接受,很大程序决定了程序通信的性能。
2》Java目前共有3种。BIO、NIO、AIO
3》BIO:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有请求时服务端就必须新起一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。简单理解: 假设一个烧开水的场景,一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。但是实际上线程在等待水壶烧开的时间段什么都没有做。
4》NIO:同步非阻塞。服务器实现模式为一个线程处理多个请求,即客户端发送的连接请求都会注册到多路复用器上(selector),多路复用器轮询到连接有IO请求就进行处理。简单理解: 一个线程不断的轮询每个水壶的状态,看看是否有水壶的状态发生了改变,从而进行下一步的操作。
5》AIO(NIO.2):异步非阻塞。AIO引入异步通道的概念,采用了Proactor模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务器端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用。这种不常见。简单理解: 线程为每个水壶上面装了一个开关,水烧开之后,水壶会自动通知线程水烧开了。
4. IO适用场景
1. BIO适用于连接数目较少且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前唯一的选择,但程序简单易理解
2.NIO 适用于连接数据较多且连接时间较短(处理较简单)的架构,比如聊天服务器,弹幕系统,服务器间通讯等。JDK1.4开始支持
3. AIO适用于连接数目较多且处理时间较长的架构,比如相册服务器,充分调用OS参与并发操作,编程较复杂。JDK1.7开始支持。