Netty是一个由事件驱动的java异步I/O高性能网络通信框架,在java中,提供网络通信的JDK主要有I/O、NIO、AIO。I/O主要是同步阻塞的网络通信协议,NIO(No-blocking I/O)提供非阻塞的读写操作,又因为非阻塞,所以可提供异步操作,NIO一般可当做异步I/O。AIO是jdk1.7中引入的异步I/O操作,客户端的请求都是通过OS完成了I/O操作之后,再交由服务器处理启动线程处理。Netty和Mina都是作为高性能网络通信框架,tomcat和jetty作为容器,可能使用到这两个通信框架(需要处理请求和分布式通信)。
Netty 与 JDK:1 , Netty将网络通信与应用处理解耦(网络通信和业务解耦)。2 , 使用Netty比使用底层JDK方便,在JDK NIO上做了封装。3 , 模块化和可复用性。
I/O操作: 一个客户端请求需要一个处理线程,该线程一直处于阻塞状态,浪费子线程资源。每个线程需要内存,当有大量线程处理并发请求时,需要JVM虚拟机需要支持大量线程,这些线程上下文切换需要花费大量资源。
NIO:通过channel处理请求,将channel注册进selector,之后selector线程处理channel中的请求,通过选择器可以使用较少的线程监听连接channel上的事件。异步方法会立即返回,并且在它完成时,会直接或者在稍后的某个时间点通知用户,会有回调函数。
netty采用者:http://netty.io/wiki/adopters.html。Netty实现了基于FTP、SMTP、HTTP、webSocket以及其他基于二进制和文本的协议。