Tomcat:基於HTTP協議的Connector配置


 

Tomcat Connector 是請求接收環節與請求處理環節的連接器,具體點說,就是將接收到的請求傳遞給Tomcat WEB容器進行處理。

Tomcat可以處理的不同協議的請求,例如HTTP協議、AJP協議。其中AJP是Tomcat與其他Web Server(例如Apache Server、IIS等)連接使用的協議。

對於HTTP協議,根據處理Socket中IO的方式的不同,又可以分為BIO、NIO、APR方式。

下面就針對Tomcat 6中的BIO、NIO方式作一個簡單的說明:

BIO 方式:

clip_image002

Acceptor負責接收Socket,然后將socket傳遞給Worker隊列中的一個worker。Worker的職責是調用HTTP11Processor,進行請求的解析,封裝成Request Response對象然后由WEB容器來處理。

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

1)acceptCount:是等待隊列最大長度。說白了就是當所有的線程都被占用后,對列里還能放一個HTTP請求等待處理。通常這個數值要大於線程池中線程的最大數。Tomcat 6 源碼中沒有發現有這個字段的設置,需要確認。

2)maxThreads:線程池中的最大線程數。默認200。如果使用Executor,就是執行線程池的最大線程數,如果不使用Executor,就是指定worker的最大數,每一個worker持有一個Thread,所以也是設置最大處理線程數。

3)connectionTimeout:當Tomcat與訪問端建立Socket連接后,連接器接收到請求前,最大等待時間。默認是60秒。

4)keepAliveTimeout:HTTP1.1默認使用keepalive方式的,就是在建立一個連接中,可以發多個HTTP請求。這個屬性就是設置在連接被關閉之前,連接器會等待下一個HTTP請求多長時間(如果在指定時間內等不到下一個連接,就會關閉連接的)。

5)maxKeepAliveRequests:建立一個連接后,可以接收的最大請求數。默認值100.

NIO模式:

clip_image004

clip_image006

Acceptor采用NIO API接收SocketChannel,封裝成NIOChannel,然后由Poller將其放到PollerEvent隊列中。

Poller其實是封裝了一個Selector,Pooler用於從PollerEvent選擇可以處理的event進行處理。

在處理一個envent時,會將可處理的event發送給Worker隊列中的一個worker,worker的處理過程與BIO中的一樣。

1)acceptorThreadCount:接收Socket連接的線程數。默認值是1,這個值不需要太大,最大值與CPU核心數一樣就行了,沒有必要太大。

2)selecorTimeout:選擇超時時間。

3)maxKeepAliveRequests:與BIO一樣。

4)maxThreads最大線程數


免責聲明!

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



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