談談 Tomcat 請求處理流程

2021-02-15    分類: 網站建設

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

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

本文對 Tomcat 的介紹以 Tomcat-9.0.0.M22 為標準。

Tomcat-9.0.0.M22 是 Tomcat 目前最新的版本,但尚未發布,它實現了 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, 當超過 100 個時會拒絕服務。我們可以通過配置 conf/server.xml 中 Connector 的 acceptCount 屬性對其進行定制。
  2. createExecutor() 用于創建 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,我們只關注每個容器的 Basic Valve。其他 Valve 都是在 Basic Valve 前執行。
  • request.getHost().getPipeline().getFirst().invoke() 先獲取對應的 StandardHost,并執行其 pipeline。
  • request.getContext().getPipeline().getFirst().invoke() 先獲取對應的 StandardContext,并執行其 pipeline。
  • request.getWrapper().getPipeline().getFirst().invoke() 先獲取對應的 StandardWrapper,并執行其 pipeline。
  • 最值得說的就是 StandardWrapper 的 Basic Valve,StandardWrapperValve
  1. allocate() 用來加載并初始化 Servlet,值的一提的是 Servlet 并不都是單例的,當 Servlet 實現了 SingleThreadModel 接口后,StandardWrapper 會維護一組 Servlet 實例,這是享元模式。當然了 SingleThreadModel在 Servlet 2.4 以后就棄用了。
  2. createFilterChain() 方法會從 StandardContext 中獲取到所有的過濾器,然后將匹配 Request URL 的所有過濾器挑選出來添加到 filterChain 中。
  3. doFilter() 執行過濾鏈,當所有的過濾器都執行完畢后調用 Servlet 的 service() 方法。

Reference

  • 《How Tomcat works》
  • https://www.amazon.com/How-Tomcat-Works-Budi-Kurniawan/dp/097521280X
  • 《Tomcat 架構解析》– 劉光瑞
  • 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架構分析 (connector NIO 實現)
  • http://gearever.iteye.com/blog/1844203

網站題目:談談 Tomcat 請求處理流程
文章地址:http://m.kartarina.com/news/101030.html

成都網站建設公司_創新互聯,為您提供面包屑導航關鍵詞優化定制網站全網營銷推廣網站設計公司App設計

廣告

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

成都做網站
主站蜘蛛池模板: 无码日韩人妻av一区免费| 亚洲av日韩av高潮潮喷无码| 最新亚洲春色Av无码专区| 亚洲成A∨人片在线观看无码| 亚洲欧洲av综合色无码| 五月婷婷无码观看| 亚洲AV无码久久精品成人| 亚无码乱人伦一区二区| 亚洲日韩精品无码一区二区三区| 中文字幕av无码一二三区电影| 久久国产精品无码网站| 无遮掩无码h成人av动漫| 亚洲精品无码国产| 亚洲综合最新无码专区| 亚洲av无码片vr一区二区三区 | 人妻丰满av无码中文字幕| 亚洲AV无码一区二区三区牲色| 亚洲av中文无码乱人伦在线咪咕| 无码人妻精一区二区三区| 亚洲综合无码一区二区三区| 亚洲AV无码乱码国产麻豆| 亚洲一本大道无码av天堂 | 狠狠精品久久久无码中文字幕| 中文有码无码人妻在线| 久久久久久久人妻无码中文字幕爆| 亚洲中文字幕无码爆乳av中文| 无码aⅴ精品一区二区三区| 亚洲精品av无码喷奶水糖心| 无码人妻精品一区二区三区久久 | 无码人妻一区二区三区在线| 免费人妻av无码专区| 黑人巨大无码中文字幕无码| 无码人妻一区二区三区一| 人妻丰满熟妇AV无码片| 无码伊人66久久大杳蕉网站谷歌| 中国无码人妻丰满熟妇啪啪软件| 无码国内精品久久人妻麻豆按摩| HEYZO无码中文字幕人妻| 人妻无码久久精品| 国产啪亚洲国产精品无码| 成年无码av片在线|