亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Tomcat的異步通訊配置----使用NIO

系統(tǒng) 1805 0

Tomcat 6.X實(shí)現(xiàn)了JCP的Servlet 2.5和JSP2.1的規(guī)范,并且包括其它很多有用的功能,使它成為開(kāi)發(fā)
和部署web應(yīng)用和web服務(wù)的堅(jiān)實(shí)平臺(tái)。
?????? NIO (No-blocking I/O)從JDK 1.4起,NIO API作為一個(gè)基于緩沖區(qū),并能提供非阻塞I/O操作的API
被引入。?


?????? 作為開(kāi)源web服務(wù)器的java實(shí)現(xiàn),tomcat幾乎就是web開(kāi)發(fā)者開(kāi)發(fā)、測(cè)試的首選,有很多其他商業(yè)服務(wù)
器的開(kāi)發(fā)者也會(huì)優(yōu)先選擇tomcat作為開(kāi)發(fā)時(shí)候使用,而在部署的時(shí)候,把應(yīng)用發(fā)布在商業(yè)服務(wù)器上。也有
許多商業(yè)應(yīng)用部署在tomcat上,tomcat承載著其核心的應(yīng)用。但是很多開(kāi)發(fā)者很迷惑,為什么在自己的應(yīng)
用里使用tomcat作為平臺(tái)的時(shí)候,而并發(fā)用戶超過(guò)一定數(shù)量,服務(wù)器就變的非常繁忙,而且很快就出現(xiàn)了
connection refuse的錯(cuò)誤。但是很多商業(yè)應(yīng)用部署在tomcat上運(yùn)行卻安然無(wú)恙。

????? 其中有個(gè)很大的原因就是,配置良好的tomcat都會(huì)使用APR(Apache Portable Runtime),APR是
Apache HTTP Server2.x的核心,它是高度可移植的本地庫(kù),它使用高性能的UXIN I/O操作,低性能的
java io操作,但是APR對(duì)很多Java開(kāi)發(fā)者而言可能稍稍有點(diǎn)難度,在很多OS平臺(tái)上,你可能需要重新編
譯APR。但是從Tomcat6.0以后, Java開(kāi)發(fā)者很容易就可以是用NIO的技術(shù)來(lái)提升tomcat的并發(fā)處理能力。
但是為什么NIO可以提升tomcat的并發(fā)處理能力呢,我們先來(lái)看一下java 傳統(tǒng)io與 java NIO的差別。
?????
Java 傳統(tǒng)的IO操作都是阻塞式的(blocking I/O), 如果有socket的編程基礎(chǔ),你會(huì)接觸過(guò)堵塞socket和
非堵塞socket,堵塞socket就是在accept、read、write等IO操作的的時(shí)候,如果沒(méi)有可用符合條件的資
源,不馬上返回,一直等待直到有資源為止。而非堵塞socket則是在執(zhí)行select的時(shí)候,當(dāng)沒(méi)有資源的時(shí)
候堵塞,當(dāng)有符合資源的時(shí)候,返回一個(gè)信號(hào),然后程序就可以執(zhí)行accept、read、write等操作,一般來(lái)
說(shuō),如果使用堵塞socket,通常我們通常開(kāi)一個(gè)線程accept socket,當(dāng)讀完這次socket請(qǐng)求的時(shí)候,開(kāi)一
個(gè)單獨(dú)的線程處理這個(gè)socket請(qǐng)求;如果使用非堵塞socket,通常是只有一個(gè)線程,一開(kāi)始是select狀,
當(dāng)有信號(hào)的時(shí)候可以通過(guò) 可以通過(guò)多路復(fù)用(Multiplexing)技術(shù)傳遞給一個(gè)指定的線程池來(lái)處理請(qǐng)求,然
后原來(lái)的線程繼續(xù)select狀態(tài)。 最簡(jiǎn)單的多路復(fù)用技術(shù)可以通過(guò)java管道(Pipe)來(lái)實(shí)現(xiàn)。換句話說(shuō),如果
客戶端的并發(fā)請(qǐng)求很大的時(shí)候,我們可以使用少于客戶端并發(fā)請(qǐng)求的線程數(shù)來(lái)處理這些請(qǐng)求,而這些來(lái)不
及立即處理的請(qǐng)求會(huì)被阻塞在java管道或者隊(duì)列里面,等待線程池的處理。請(qǐng)求 聽(tīng)起來(lái)很復(fù)雜,在這個(gè)架
構(gòu)當(dāng)?shù)赖膉ava 世界里,現(xiàn)在已經(jīng)有很多優(yōu)秀的NIO的架構(gòu)方便開(kāi)發(fā)者使用,比如Grizzly,Apache Mina等
等,如果你對(duì)如何編寫(xiě)高性能的網(wǎng)絡(luò)服務(wù)器有興趣,你可以研讀這些源代碼。

????? 簡(jiǎn)單說(shuō)一下,在web服務(wù)器上阻塞IO(BIO)與NIO一個(gè)比較重要的不同是,我們使用BIO的時(shí)候往往會(huì)
為每一個(gè)web請(qǐng)求引入多線程,每個(gè)web請(qǐng)求一個(gè)單獨(dú)的線程,所以并發(fā)量一旦上去了,線程數(shù)就上去
了,CPU就忙著線程切換,所以BIO不合適高吞吐量、高可伸縮的web服務(wù)器;而NIO則是使用單線程(單
個(gè)CPU)或者只使用少量的多線程(多CPU)來(lái)接受Socket,而由線程池來(lái)處理堵塞在pipe或者隊(duì)列里的請(qǐng)
求.這樣的話,只要OS可以接受TCP的連接,web服務(wù)器就可以處理該請(qǐng)求。大大提高了web服務(wù)器的可
伸縮性。

??? 我們來(lái)看一下配置,你只需要在server.xml里把 HTTP Connector做如下更改,

??? <Connector port="8080" protocol="HTTP/1.1"?
?????????????? connectionTimeout="20000"?
?????????????? redirectPort="8443" />
??? 改為
??? <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"?
?????????????? connectionTimeout="20000"?
?????????????? redirectPort="8443" />

然后啟動(dòng)服務(wù)器,你會(huì)看到org.apache.coyote.http11.Http11NioProtocol start的信息,表示NIO已經(jīng)啟動(dòng)。其他的配置請(qǐng)參考官方配置文檔。

Enjoy it.

最后貼上官方文檔上對(duì)tomcat的三種Connector的方式做一個(gè)簡(jiǎn)單比較,
????

      Java Blocking Connector       Java Nio Blocking Connector       APR Connector

Classname         Http11Protocol                  Http11NioProtocol         Http11AprProtocol

Tomcat Version   3.x 4.x 5.x 6.x                       6.x                     5.5.x 6.x

Support Polling         NO                             YES                        YES

Polling Size           N/A                   Unlimited - Restricted by mem        Unlimited

Read HTTP Request     Blocking                     Blocking                       Blocking

Read HTTP Body        Blocking                     Blocking                       Blocking

Write HTTP Response   Blocking                     Blocking                       Blocking

SSL Support           Java SSL                     Java SSL                       OpenSSL

SSL Handshake         Blocking                     Non blocking                   Blocking

Max Connections       maxThreads                   See polling size               See polling size
    

Tomcat的異步通訊配置----使用NIO


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 蜜桃日本一道无卡不码高清 | 欧美日韩一本 | www久久久 | 国内视频在线 | 亚洲精品老司机综合影院 | 亚洲精品高清国产一线久久97 | 国内精品中文字幕 | 一级a毛片免费 | 一级片aa| 国产一区二区三区欧美 | 国产69精品久久久久999三级 | 四虎国产欧美成人影院 | 青青草国产一区二区三区 | 一区二区成人国产精品 | 天天操妹子 | 四虎地址8848jia | 波多一区 | 国内外成人在线视频 | 奇米影视在线播放 | 久久精品国产欧美成人 | 真实国产精品视频国产网 | 天天操天天干天天射 | 精品国产91 | 91亚洲精品成人一区 | 亚洲欧美国产高清va在线播放 | 黄色毛片视频 | 久久国产精品免费一区二区三区 | 亚洲精品成人a在线观看 | 精品国产日韩亚洲一区二区 | 狠狠色噜噜狠狠狠狠2021天天 | 欧美vs日韩vs国产在线观看 | 久久精品国产精品亚洲综合 | 搡的我好爽视频在线观看 | 色拍拍欧美视频在线看 | 中国性孕妇xxxxxxxx孕交 | 亚洲精品福利视频 | 国产精品成人在线 | 日韩欧美亚洲每日更新网 | 人与拘一级a毛片 | 波多野结衣中文丝袜字幕 | 久久久国产精品视频 |