一、Netty和Tomcat有什么區(qū)別?
Netty和Tomcat最大的區(qū)別就在于通信協(xié)議,Tomcat是基于Http協(xié)議的,他的實(shí)質(zhì)是一個(gè)基于http協(xié)議的web容器,但是Netty不一樣,他能通過(guò)編程自定義各種協(xié)議,因?yàn)閚etty能夠通過(guò)codec自己來(lái)編碼/解碼字節(jié)流,完成類似redis訪問(wèn)的功能,這就是netty和tomcat最大的不同。
有人說(shuō)netty的性能就一定比tomcat性能高,其實(shí)不然,tomcat從6.x開(kāi)始就支持了nio模式,并且后續(xù)還有arp模式(一種通過(guò)JNI調(diào)用apache網(wǎng)絡(luò)庫(kù)的模式),相比于舊的bio模式,并發(fā)性能得到了很大提高,特別是arp模式,而netty是否比tomcat性能更高,則要取決于netty程序作者的技術(shù)實(shí)力了。
二、為什么Netty受歡迎?
netty是一款收到大公司青睞的框架,在我看來(lái),netty能夠受到青睞的原因有三:
并發(fā)高
傳輸快
封裝好
三、Netty為什么并發(fā)高 ?
Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)開(kāi)發(fā)的網(wǎng)絡(luò)通信框架,對(duì)比于BIO(Blocking I/O,阻塞IO),他的并發(fā)性能得到了很大提高。
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)。
然后呢 不同的操作系統(tǒng)對(duì)上述模型支持不同: unix支持io多路復(fù)用,不同系統(tǒng)叫法不同 :freebsd里面叫 kqueue;linux 是epoll。而windows: 2000的時(shí)候就誕生了IOCP支持最后一種異步I/O
java是一種跨平臺(tái)語(yǔ)言,為了支持異步IO,誕生了nio,Java1.4引入的NIO 1.0是基于I/O復(fù)用的。在各個(gè)平臺(tái)上會(huì)選擇不同的復(fù)用方式。Linux用的epoll,BSD上用kqueue,Windows上應(yīng)該是重疊I/O(肯定不是IOCP)
但是nio直接使用比較難用,所以有了mina,netty這些針對(duì)網(wǎng)絡(luò)io部分(tcp/udp-傳輸層)的封裝(nio也有非網(wǎng)絡(luò)io部分),為了使nio更易用。
http是應(yīng)用層的協(xié)議。
servlet3.0則是另外一種東西,不是對(duì)協(xié)議的封裝,javaee6眾多規(guī)范中的一個(gè),但凡javaee6的實(shí)現(xiàn)(或者像tomcat這種web容器部分的實(shí)現(xiàn)),都會(huì)支持servlet3.0,servlet理論上可以支持多種應(yīng)用層協(xié)議(不單單只是http),而servlet3.0以后提供的異步特性與javase提供的nio或aio無(wú)直接關(guān)系,就是使用bio一樣可以實(shí)現(xiàn)servlet3.0中提供的異步特性。
異步只是一種概念,異步與否要看,上層使用的異步,而支持的下層完全可能是阻塞的。
tomcat就是針對(duì)http層的,所以我建議http還是選擇tomcat(或者其他成熟的http-server),并不是說(shuō)netty不好,而是你的選擇問(wèn)題。
netty是一個(gè)網(wǎng)絡(luò)組件,tcp,udp,http都可以弄,但是官方文檔都是些hello wolrd級(jí)別的。如果你非常了解http結(jié)構(gòu),完全可以基于netty搞出一個(gè)比tomcat牛的http server。如果做tcp開(kāi)發(fā),netty不二之選!
現(xiàn)在高并發(fā)分布式網(wǎng)站架構(gòu)一般采用nginx(前端負(fù)載均衡)+ Netty/Tomcat(HTTP)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-463034.html
Netty是基于Java NIO開(kāi)發(fā)的,而Tomcat是Apache下的針對(duì)HTTP的服務(wù)器項(xiàng)目,前者更像一個(gè)中間件框架,后者更像一個(gè)工具。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-463034.html
到了這里,關(guān)于Netty和Tomcat的區(qū)別、性能對(duì)比的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!