2017年网站建设招标书,微信公众号微网站 建设报价表,网站专题模板,网站建设进度表 下载文章目录 一、Netty和Tomcat有什么区别#xff1f;二、为什么Netty受欢迎#xff1f;三、Netty为什么并发高 #xff1f; 一、Netty和Tomcat有什么区别#xff1f;
Netty和Tomcat最大的区别就在于通信协议#xff0c;Tomcat是基于Http协议的#xff0c;他的实质是一个基… 文章目录 一、Netty和Tomcat有什么区别二、为什么Netty受欢迎三、Netty为什么并发高 一、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程序作者的技术实力了。
二、为什么Netty受欢迎
netty是一款收到大公司青睐的框架在我看来netty能够受到青睐的原因有三 并发高 传输快 封装好
三、Netty为什么并发高
Netty是一款基于NIONonblocking I/O非阻塞IO开发的网络通信框架对比于BIOBlocking I/O阻塞IO他的并发性能得到了很大提高。
NIO 2.0里终于有AIO了Linux上用AIOWindows上用IOCP都支持了概念上的最后一种IOasynchronous I/O
就IO而言概念上有5中模型blocking I/Ononblocking I/OI/O multiplexing (select and poll)signal driven I/O (SIGIO)asynchronous I/O (the POSIX aio_functions)。 然后呢 不同的操作系统对上述模型支持不同: unix支持io多路复用不同系统叫法不同 :freebsd里面叫 kqueuelinux 是epoll。而windows: 2000的时候就诞生了IOCP支持最后一种异步I/O java是一种跨平台语言为了支持异步IO,诞生了nio,Java1.4引入的NIO 1.0是基于I/O复用的。在各个平台上会选择不同的复用方式。Linux用的epollBSD上用kqueueWindows上应该是重叠I/O肯定不是IOCP 但是nio直接使用比较难用所以有了minanetty这些针对网络io部分tcp/udp-传输层的封装nio也有非网络io部分为了使nio更易用。 http是应用层的协议。 servlet3.0则是另外一种东西不是对协议的封装javaee6众多规范中的一个但凡javaee6的实现或者像tomcat这种web容器部分的实现都会支持servlet3.0servlet理论上可以支持多种应用层协议不单单只是http而servlet3.0以后提供的异步特性与javase提供的nio或aio无直接关系就是使用bio一样可以实现servlet3.0中提供的异步特性。 异步只是一种概念异步与否要看上层使用的异步而支持的下层完全可能是阻塞的。
tomcat就是针对http层的所以我建议http还是选择tomcat(或者其他成熟的http-server)并不是说netty不好而是你的选择问题。 netty是一个网络组件tcp,udp,http都可以弄但是官方文档都是些hello wolrd级别的。如果你非常了解http结构完全可以基于netty搞出一个比tomcat牛的http server。如果做tcp开发netty不二之选 现在高并发分布式网站架构一般采用nginx前端负载均衡 Netty/TomcatHTTP
Netty是基于Java NIO开发的而Tomcat是Apache下的针对HTTP的服务器项目前者更像一个中间件框架后者更像一个工具。