Tomcat原始碼之聯結器Connector解析

2022-03-15 11:52:24 字數 2896 閱讀 6765

宣告:本文摘抄參考自:

connector的主要功能:

聯結器主要用於對外交流,它負責接收外部的請求,然後把請求轉交給container進行處理。主要功能如下:

監聽網路請求、接受位元組流

根據應用層協議(http or ajp)把接受到位元組流轉換成tomcatrequest

把tomcatreqeust轉換成servletrequest

呼叫容器servlet,得到servletresponse

把servletrespone轉換成tomcatresponse

把tomcatresponse轉化成位元組流,返回給瀏覽器

基於以上詳細分析可知connector的主要功能可以抽象為三點

connector的內部元件

tomcat connector的**元件,主要有三個

endpoint-用於網路監聽

processor-用於協議解析處理

adapter-用於轉換,解耦connector和container

tomcat的類設計中增加了乙個protocolhandler, 把endpoint和processor,adapter封裝到了一起。先看乙個整體元件圖。

endpoint的介紹:

endpoint是通訊節點,實現了tcp/ip協議,包含兩個核心元件:

acceptor,主要用於監聽socket鏈結請求,

socketprocessor,用於處理接收到的 socket 請求,實現了runnable介面,在run方法中會呼叫processor對socket請求進行處理。

endpoint核心介面

public

abstract

class abstractendpoint

這裡面還有乙個executor, 這個是tomcat自己擴充套件的執行緒池。acceptor監聽到socket請求後,建立socketprocessor,由executor來執行socketprocessor。

acceptor核心**:

protected

class acceptor extends

abstractendpoint.acceptor catch

(throwable t) }}

}

setsocketoption最終會呼叫endpoint的process方法。

endpoint的process核心方法**如下:

public

socketevent event,

boolean

dispatch) else

executor executor =getexecutor();

executor.execute(sc);

//交給執行緒池進行處理

return

true

; }

socketprocessor的抽象類

public

abstract

class socketprocessorbaseimplements

runnable

dorun();}}

protected

abstract

void

dorun();

}

socketprocessor類

protected

class socketprocessor extends socketprocessorbase

@override

protected

void

dorun()

}

上面類中gethandler().process的具體實現。(handler的介面由endpoint的內部類進行定義。

protected

static

class connectionhandlerimplements abstractendpoint.handler

}

至此、請求已經成功傳給可processor。

processor和adapter

processor是應用層協議比如http的處理。他負責把請求傳給adapter。核心**如下。

@override

throws

ioexception

catch

(exception e)

return

null

; }

adapter解耦了connector和container的關係,主要負責把tomcatrequest轉換為servletrequest,然後最終呼叫container,核心**如下.

public

void

service(org.apache.coyote.request req, org.apache.coyote.response res)

throws

exception

//calling the container

connector.getservice().getcontainer().getpipeline().getfirst().invoke(request, response);

}

至此請求到達了container,我們的servlet會對進行業務邏輯處理。

細化流程:

Tomcat聯結器詳解

1.聯結器等同於nginx中的引擎。2.tomcat聯結器有三種執行模式bio nio apr 1 bio blocking i o,阻塞式i o操作 1 表示tomcat使用的是傳統的j a i o操作 即j a.io包及其子包 2 乙個執行緒處理乙個請求。3 缺點 併發量高時,執行緒數較多,浪費...

Tomcat 聯結器executor優化

tomcat 的自身引數的優化,修改配置檔案中的配置資訊,調整連線數,超時等。1.connector 聯結器的配置 tomcat 聯結器的三種方式 bio nio 和 apr,三種方式效能差別很大,apr 的效能最優,bio 的效能最差。而 tomcat 7 使用的 connector 預設就啟用的...

關於apache和tomcat的聯結器

mod jk2確實很爛。幾天的mod jk2的雲山霧罩之後,apache2 tomcat5用mod jk.so輕鬆搞定。儘管apache.也稱不建議使用令人唾棄的mod jk2.so了。但最新的tomcat中卻給出的mod jk2.so的預設配置檔案 workers2.properties。大家不要...