Netty与Tomcat有什么区别?

Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,它的实质是一个基于http协议的web容器。

Netty是通过编程自定义各种协议,而且Netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能,这就是netty和tomcat最大的不同。

但Netty的性能就一定比tomcat性能高?这个要根据具体的情况而定,Tomcat从6.x开始就支持了NIO模式,并且后续还有ARP模式——一种通过jni调用apache网络库的模式,相比于旧的BIO模式,并发性能得到了很大提高,特别是ARP模式,而Netty是否比tomcat性能更高,则要取决于Netty程序开发人员的技术实力了。

servlet3.0

servlet3.0则是另外一种东西,不是对协议的封装,javaee6众多规范中的一个,但凡javaee6的实现(或者像tomcat这种web容器部分的实现),都会支持servlet3.0,servlet理论上可以支持多种应用层协议(不单单只是http),而servlet3.0以后提供的异步特性与javase提供的nio或aio无直接关系,就是使用bio一样可以实现servlet3.0中提供的异步特性。

为什么Netty受欢迎?

Netty是一款受到大公司青睐的框架,Netty能够受到青睐的原因有三:

  • 并发高
  • 传输快
  • 封装好

Netty2.0

NIO 2.0里终于有AIO了,Linux上用AIO,Windows上用IOCP,都支持了概念上的最后一种IOasynchronous I/O。

就IO而言:概念上有5中模型:blocking I/O,nonblocking I/O,I/O multiplexing (select and poll),signal driven I/O (SIGIO),asynchronous I/O (the POSIX aio_functions)。

不同的操作系统对上述模型支持不同: unix支持io多路复用,不同系统叫法不同 :freebsd里面叫 kqueue;linux 是epoll。而windows: 2000的时候就诞生了IOCP支持最后一种异步I/O。

Netty与NIO

java是一种跨平台语言,为了支持异步IO,诞生了NIO,Java1.4引入的NIO1.0是基于I/O复用的。在各个平台上会选择不同的复用方式。Linux用的epoll,BSD上用kqueue,Windows上应该是重叠I/O(肯定不是IOCP)。

但是NIO直接使用比较难用,所以有了Mina,Netty这些针对网络io部分(tcp/udp-传输层)的封装(nio也有非网络io部分),为了使NIO更易用。

Netty为什么并发高

Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架,对比于BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。



Netty与Tomcat的区别插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://folen.top/2020/12/02/netty-tomcat/