tomcat的Connector和三種運行模式


一、Connector

在Tomcat架構中,Connector主要負責處理與客戶端的通信。Connector的實例用於監聽端口,接受來自客戶端的請求並將請求轉交給Engine處理。同時將來自Engine的答復返回給客戶端。

 

Connector的種類

Tomcat源碼中與connector相關的類位於org.apache.coyote包中,Connector分為以下幾類:

Http Connector, 基於HTTP協議,負責建立HTTP連接。它又分為BIO Http Connector與NIO Http Connector兩種,后者提供非阻塞IO與長連接Comet支持。
默認情況下,Tomcat使用的就是這個Connector。


AJP Connector, 基於AJP協議,AJP是專門設計用來為tomcat與http服務器之間通信專門定制的協議,能提供較高的通信速度和效率。
如與Apache服務器集成時,采用這個協議。


APR HTTP Connector, 用C實現,通過JNI調用的。主要提升對靜態資源(如HTML、圖片、CSS、JS等)的訪問性能。現在這個庫已獨立出來可用在任何項目中。
Tomcat在配置APR之后性能非常強勁。

 

tomcat中實現了以下幾種Connector:

#以上三種Connector實現都是直接處理來自客戶端Http請求
org.apache.coyote.http11.Http11Protocol : 支持HTTP/1.1 協議的連接器。

org.apache.coyote.http11.Http11NioProtocol : 支持HTTP/1.1 協議+New IO的連接器。

org.apache.coyote.http11.Http11AprProtocol : 使用APR(Apache portable runtime)技術的連接器,利用Nativ


#以下三種實現方法則是與web server打交道
org.apache.coyote.ajp.AjpProtocol:使用AJP協議的連接器,實現與web server(如Apache httpd)之間的通信

org.apache.coyote.ajp.AjpNioProtocol:SJP協議+ New IO

org.apache.coyote.ajp.AjpAprProtocol:AJP + APR

 

二、Tomcat Connector的三種運行模式: bio nio apr

 

三種模式對比:
image

 

關於tomcat的線程等參數配置,可參考我的另一篇文章:https://www.cnblogs.com/weiyiming007/p/12599917.html

 

1、bio(blocking I/O)

即阻塞式I/O操作,表示Tomcat使用的是傳統的Java I/O操作(即java.io包及其子包)。是基於JAVA的HTTP/1.1連接器,Tomcat7以下版本在默認情況下
是以bio模式運行的。一般而言,bio模式是三種運行模式中性能最低的一種(一個線程只處理一個請求)。自Tomcat 8.5 版本開始,Tomcat就移除了對BIO的支持;

 

server.xml配置:

<Connector  port=”8080
protocol=”HTTP/1.1
  
maxThreads=”150”  
connectionTimeout=”20000”   
redirectPort=”8443” />

 

2、nio(new I/O)

為了提高I/O性能,JDK自1.4版本引入了NIO模式,它彌補了原來BIO方式的不足,在標准的java代碼中提供了 高速、面向塊的I/O。 通過定義包含數據的類以及以塊的形式處理數據,
NIO可以在不編寫本地代碼的情況下利用底層優化,這是BIO所無法做到的;

NIO模式 是Java SE 1.4及后續版本提供的一種新的I/O操作方式(即java.nio包及其子包)。是一個基於緩沖區、並能提供非阻塞I/O操作的Java API,它擁有比傳統I/O操作(bio)更好的並發
運行性能。要讓Tomcat以nio模式來運行比較簡單,只需要在Tomcat安裝目錄/conf/server.xml文件中將如下配置:

 

server.xml配置:

# protocol屬性值改為org.apache.coyote.http11.Http11NioProtocol即可:

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />

 

在tomcat8中有最新的nio2,速度更快,也建議使用nio2

 

3、apr

apr(Apache Portable Runtime/Apache可移植運行時),是Apache HTTP服務器的支持庫。你可以簡單地理解為,Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態鏈接庫來
處理文件讀取或網絡傳輸操作,從而大大地提高Tomcat對靜態文件的處理性能。 Tomcat apr也是在Tomcat上運行高並發應用的首選模式。如果我們的Tomcat不是在apr模式下運行,
在啟動Tomcat的時候,我們可以在日志信息中看到類似如下信息:

2013-8-6 16:17:49 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments 
was not found on the java.library.path: xxx/xxx(這里是路徑信息)

 

Tomcat apr運行模式的配置是三種運行模式之中相對比較麻煩的一種。據官方文檔所述,Tomcat apr需要以下三個組件的支持:

APR library  [APR庫]

JNI wrappers for APR used by Tomcat (libtcnative)  [簡單地說,如果是在Windows操作系統上,就是一個名為tcnative-1.dll的動態鏈接庫文件]

OpenSSL libraries  [OpenSSL庫]

 

此外,與配置nio運行模式一樣,也需要將對應的Connector節點的protocol屬性值改為org.apache.coyote.http11.Http11AprProtocol

不過,上述繁瑣的操作都是Tomcat 7.0.30之前的版本才需要這樣配置,從Tomcat 7.0.30版本開始,Tomcat已經自帶了tcnative-1.dll等文件,並且

默認就是在Tomcat apr模式下運行,因此我們只需要下載最新版本的Tomcat直接使用即可(沒試過,暫時還是用的nio)。

 

在Tomcat的啟動日志信息中一般會包含當前的運行模式信息;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM