Netty和Tomcat区别

Netty与Tomcat区别

它们的区别不少,最大的区别就在于通信协议,这是众所周知的,Tomcat是一个服务器,它一定是基于Http协议的,它的实质是一个基于http协议的web容器,Netty则不同,Netty可以通过编程自定义各种协议,这是因为netty能够通过codec自己来编码/解码字节流,完成一种类似redis访问的功能,这就是它们之间最大的不同。

事实上很多人都说netty的性能肯定比tomcat性能高,实际tomcat从6.x开始就一直支持nio模式,且后续还有arp模式,这是一种通过jni调用apache网络库的模式,相较于老旧不堪的bio模式,并发性能得到了极大提高,特别是arp模式。而两者之间的性能问题,则取决于开发者了。

Netty有什么特点?

netty是极受大公司青睐的框架,这是因为它的三个特点:

高并发

传输快

封装好

Netty为什么并发高 ?

如图:

netty和tomcat区别

阻塞IO的通信方式

netty和tomcat区别

非阻塞IO的通信方式

从上面可以看到,NIO的单线程能处理连接的数量明显要比BIO高出不少,而原因就是图二中出现的Selector。

当一个连接建立之后,它有两个步骤要做,一是接收完客户端发过来的全部数据,二是在服务端处理完请求业务之后返回response给客户端。NIO和BIO的区别主要就是在第一步。

在BIO中,等待客户端发数据这个过程是阻塞的,这样就造成了一个线程只能处理一个请求的情况,而机器能支持的最大线程数是有限的,么BIO不能支持高并发的原因就在这了。

但在NIO中,当一个Socket建立好之后,Thread并不会阻塞去接受这个Socket,而是将这个请求交给Selector,Selector会不断的去遍历所有的Socket,一旦有一个Socket建立完成,他会通知Thread,然后Thread处理完数据再返回给客户端——这个过程是不阻塞的,这样就能让一个Thread处理更多的请求了。