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 方式:
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模式:
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最大線程數
新聞熱點
疑難解答