netty是什么?java
Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。web
也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 能够确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty至关于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。redis
“快速”和“简单”并不用产生维护性或性能上的问题。Netty 是一个吸取了多种协议(包括FTP、SMTP、HTTP等各类二进制文本协议)的实现经验,并通过至关精心设计的项目。最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。数据库
Netty和Tomcat最大的区别就在于通讯协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,可是Netty不同,他能经过编程自定义各类协议,由于netty可以经过codec本身来编码/解码字节流,完成相似redis访问的功能,这就是netty和tomcat最大的不一样。apache
有人说netty的性能就必定比tomcat性能高,其实否则,tomcat从6.x开始就支持了nio模式,而且后续还有arp模式——一种经过jni调用apache网络库的模式,相比于旧的bio模式,并发性能获得了很大提升,特别是arp模式,而netty是否比tomcat性能更高,则要取决于netty程序做者的技术实力了。编程
如第一部分所述,netty是一款收到大公司青睐的框架,在我看来,netty可以受到青睐的缘由有三: tomcat
Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通讯框架,对比于BIO(Blocking I/O,阻塞IO),他的并发性能获得了很大提升,两张图让你了解BIO和NIO的区别:服务器
阻塞方式的io网络
非阻塞方式的io并发
从这两图能够看出,NIO的单线程能处理链接的数量比BIO要高出不少,而为何单线程能处理更多的链接呢?缘由就是图二中出现的Selector
。
当一个链接创建以后,他有两个步骤要作,第一步是接收完客户端发过来的所有数据,第二步是服务端处理完请求业务以后返回response给客户端。NIO和BIO的区别主要是在第一步。
在BIO中,等待客户端发数据这个过程是阻塞的,这样就形成了一个线程只能处理一个请求的状况,而机器能支持的最大线程数是有限的,这就是为何BIO不能支持高并发的缘由。
Codec
Netty中的编码/解码器,经过他你能完成字节与pojo、pojo与pojo的相互转换,从而达到自定义协议的目的。
在Netty里面最有名的就是HttpRequestDecoder和HttpResponseEncoder了。