国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Tomcat源碼分析(一)

2019-11-14 14:57:43
字體:
來源:轉載
供稿:網友

這段時間簡單的看了一下Tomcat的源碼,在這里做個筆記!

  1. tomcat 架構圖

 

Catalina: tomcat的頂級容器,main()方法中就是通過,創建Catalina 對象實例,來啟動或者關閉 tomcat;

Server: 是管理tomcat所有組件的容器,包含一個或多個的service;

Service: Service是包含Connector和Container的集合,Service用適當的Connector接收用戶的請求,再發給相應的Container來處理;

Connector: 主要功能是 ◇socket的接收 ◇根據協議類型處理socket ◇封裝相應的request和response,交給Container;

Container: Engine容器接收來自Connector的請求,并且通過Pipeline依次傳遞給子容器的Pipeline;

Engine: 在Engine的Pipeline中的Valve的invoke方法中,根據request.getHost()來定位下一個host;

Host: 一個Web服務器虛擬機,管理著具體的 web application

Context: 就是我們所部屬的具體Web應用的上下文,每個請求都是在具體的上下文中處理;

Wrapper:對應著Web的每一個 Servlet;

接下來,主要學習tomcat中的兩個最主要的容器,Connector和Container容器。

 

  2. Connector容器

Connector容器主要解決的問題就是Socket的接收,為了能夠很好的處理各種協議和并發異步接收,Connector加入了兩個組件 PRotocolHandler和EndPoint。

ProtocolHandler的主要作用就是根據各個協議的定義按照一定的格式句分析協議頭,封裝成request和response對象;

AbstractEndPoint 致力于高并發的解決socket的接收和處理;

 

2.1 AbstractEndPoint

EndPoint 中兩個協同合作的Runnable:

(1) Accepter負責用ServerSocket.accept()來接收客戶請求,并且把建立連接之后的Socket交由Poller處理;

(2) Poller負責接收請求,并處理;

protected class Acceptor extends AbstractEndpoint.Acceptor (Acceptor implements Runnable)public class Poller implements Runnable

 Accepter和Poller的具體寫作示意圖(個人拙見)

 從上圖中,我們可以發現,Acceptor接收到一個用戶的socket請求之后,將這個Socket封裝成PollerEvent,放入events隊列中。Poller實際上,一直while(true),當執行events隊列中有PollerEvent的時候,就會從自己的Selector中獲取到一個有數據的Channel,交給ProcessKey()處理。

 

2.1 ProtocolHandler

每一種協議都有各自具體定義,和具體的協議頭的格式,那么我么在接收到客戶請求之后,就應該根據協議的類型采用相應的解析方法。

ProtocolHandler的具體作用:

◆ 定義具體處理Socket的AbstractEndPoint;

◆ 提供解析請求的AbstractConnectionHandler來獲取具體的協議頭;

◆ 相關的init、start、stop方法

 

【參考文獻】

[1] http://blog.csdn.net/cutesource/article/details/5006062

[2] http://blog.csdn.net/yanlinwang/article/details/45648039


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彭泽县| 海盐县| 鸡东县| 多伦县| 金平| 青龙| 鄂伦春自治旗| 博白县| 新泰市| 伊春市| 孟州市| 海兴县| 资兴市| 西昌市| 乌拉特前旗| 玉屏| 龙陵县| 洞头县| 彭山县| 襄垣县| 石泉县| 左贡县| 兴和县| 灯塔市| 张家港市| 双流县| 宝坻区| 信丰县| 福贡县| 三台县| 崇义县| 綦江县| 察哈| 永寿县| 鄂伦春自治旗| 尼木县| 罗田县| 扎赉特旗| 昆明市| 临泉县| 高碑店市|