談?wù)?Tomcat 請求處理流程

2021-02-15    分類: 網(wǎng)站建設(shè)

很多東西在時序圖中體現(xiàn)的已經(jīng)非常清楚了,沒有必要再一步一步的作介紹,所以本文以圖為主,然后對部分內(nèi)容加以簡單解釋。

繪制圖形使用的工具是 PlantUML + Visual Studio Code + PlantUML Extension

本文對 Tomcat 的介紹以 Tomcat-9.0.0.M22 為標(biāo)準(zhǔn)。

Tomcat-9.0.0.M22 是 Tomcat 目前最新的版本,但尚未發(fā)布,它實現(xiàn)了 Servlet4.0 及 JSP2.3 并提供了很多新特性,需要 1.8 及以上的 JDK 支持等等,詳情請查閱 Tomcat-9.0-doc。

https://tomcat.apache.org/tomcat-9.0-doc/index.html

  1. initServerSocket(),通過 ServerSocketChannel.open() 打開一個 ServerSocket,默認綁定到 8080 端口,默認的連接等待隊列長度是 100, 當(dāng)超過 100 個時會拒絕服務(wù)。我們可以通過配置 conf/server.xml 中 Connector 的 acceptCount 屬性對其進行定制。
  2. createExecutor() 用于創(chuàng)建 Worker 線程池。默認會啟動 10 個 Worker 線程,Tomcat 處理請求過程中,Woker 最多不超過 200 個。我們可以通過配置 conf/server.xml 中 Connector 的 minSpareThreads 和 maxThreads 對這兩個屬性進行定制。
  3. Pollor 用于檢測已就緒的 Socket。默認最多不超過 2 個,Math.min(2,Runtime.getRuntime().availableProcessors());。我們可以通過配置 pollerThreadCount 來定制。
  4. Acceptor 用于接受新連接。默認是 1 個。我們可以通過配置 acceptorThreadCount 對其進行定制。

Request Process

Acceptor

  • 需要注意的是,基本上每一個容器的 StandardPipeline 上都會有多個已注冊的 Valve,我們只關(guān)注每個容器的 Basic Valve。其他 Valve 都是在 Basic Valve 前執(zhí)行。
  • request.getHost().getPipeline().getFirst().invoke() 先獲取對應(yīng)的 StandardHost,并執(zhí)行其 pipeline。
  • request.getContext().getPipeline().getFirst().invoke() 先獲取對應(yīng)的 StandardContext,并執(zhí)行其 pipeline。
  • request.getWrapper().getPipeline().getFirst().invoke() 先獲取對應(yīng)的 StandardWrapper,并執(zhí)行其 pipeline。
  • 最值得說的就是 StandardWrapper 的 Basic Valve,StandardWrapperValve
  1. allocate() 用來加載并初始化 Servlet,值的一提的是 Servlet 并不都是單例的,當(dāng) Servlet 實現(xiàn)了 SingleThreadModel 接口后,StandardWrapper 會維護一組 Servlet 實例,這是享元模式。當(dāng)然了 SingleThreadModel在 Servlet 2.4 以后就棄用了。
  2. createFilterChain() 方法會從 StandardContext 中獲取到所有的過濾器,然后將匹配 Request URL 的所有過濾器挑選出來添加到 filterChain 中。
  3. doFilter() 執(zhí)行過濾鏈,當(dāng)所有的過濾器都執(zhí)行完畢后調(diào)用 Servlet 的 service() 方法。

Reference

  • 《How Tomcat works》
  • https://www.amazon.com/How-Tomcat-Works-Budi-Kurniawan/dp/097521280X
  • 《Tomcat 架構(gòu)解析》– 劉光瑞
  • http://product.dangdang.com/25084132.html
  • Tomcat-9.0-doc
  • https://tomcat.apache.org/tomcat-9.0-doc/index.html
  • apache-tomcat-9.0.0.M22-src
  • http://www-eu.apache.org/dist/tomcat/tomcat-9/v9.0.0.M22/src/
  • tomcat架構(gòu)分析 (connector NIO 實現(xiàn))
  • http://gearever.iteye.com/blog/1844203

網(wǎng)站名稱:談?wù)?Tomcat 請求處理流程
標(biāo)題路徑:http://m.kartarina.com/news30/101030.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、品牌網(wǎng)站設(shè)計、網(wǎng)站內(nèi)鏈、服務(wù)器托管自適應(yīng)網(wǎng)站、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
主站蜘蛛池模板: 国产成人无码A区在线观看导航| 亚洲精品无码久久久久A片苍井空 亚洲精品无码久久久久YW | 国产精品久久无码一区二区三区网 | 性无码专区一色吊丝中文字幕| 国产乱子伦精品无码专区| 免费无码又爽又刺激聊天APP| 国产成人无码午夜福利软件| 亚洲av无码片在线观看| 国产成年无码AV片在线韩国| 久久水蜜桃亚洲AV无码精品| 色综合久久无码五十路人妻| 国产成人无码av片在线观看不卡| 亚洲中文字幕久久精品无码VA| 成人无码AV一区二区| 国产精品成人99一区无码| 蜜桃无码一区二区三区| 国产AV无码专区亚洲AV毛网站| 无码av大香线蕉伊人久久| 91精品久久久久久无码 | 亚洲爆乳精品无码一区二区| 国产在线无码视频一区二区三区 | 亚洲国产精品无码久久青草 | 国产精品亚洲专区无码牛牛| 91久久精品无码一区二区毛片| 亚洲爆乳无码专区| 国产亚洲精品a在线无码| 国产精品99久久久精品无码| AV无码小缝喷白浆在线观看| 国产亚洲精品无码拍拍拍色欲| 亚洲av中文无码| 精品无码久久久久久久久久| 无码日韩人妻AV一区二区三区| 色综合热无码热国产| 精品无码黑人又粗又大又长 | 日韩AV无码一区二区三区不卡毛片| 无码人妻久久一区二区三区免费丨| 亚洲av日韩av无码av| 精品人妻无码一区二区色欲产成人 | 国产激情无码一区二区三区| 精品无码一级毛片免费视频观看 | 久久亚洲精品无码AV红樱桃|