日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Tomcat處理請求的流程

瀏覽:326日期:2023-09-08 20:45:27
目錄一、組件詳解二、請求處理流程1.總體流程圖2.Worker線程任務流程三、源碼跟蹤1.Tomcat啟動線程組件2.Acceptor3.Poller4.Worker總結一、組件詳解

在Tomcat處理客戶端請求的過程中,這里面有三個組件概念,他們都是線程,分別負責不同的職責。(必須記清楚這三個線程組件)

Acceptor

一個普通線程任務,用于接收新連接,并將新連接封裝,選擇一個 Poller 將新連接添加到 Poller 的事件隊列中。

Poller

一個線程任務,用于監聽 Socket 事件,當有任務來臨時,將 Socket 封裝,添加到 worker 線程池的任務隊列中。

Worker

他是創建一組線程的,每個線程任務都是一個阻塞隊列,用于對請求進行處理(例如我們中間件參數中的最大線程數就是指最多創建多少個Worker線程)。每個Worker線程任務包括分析解析請求報文、創建 Request 對象、調用容器的 管道pipeline 執行閥門value、執行servlet的具體邏輯。

二、請求處理流程1.總體流程圖

2.Worker線程任務流程

三、源碼跟蹤1.Tomcat啟動線程組件

Tomcat啟動時,如果默認使用NIO模式,先是執行了AbstractEndpoint.initServerSocket,通過 ServerSocketChannel.open() 打開一個 ServerSocket通道,默認綁定到 8080 端口,用于監聽請求。

說明:在Java語言的NIO中,類ServerSocketChannel就是用來處理TPC連接的客戶端,他的open方法就是用例建立一個TPC連接。

然后Tomcat會創建Worker 線程池、Acceptor線程、Poller線程:

AbstractEndpoint.createExecutor,用于創建 Worker 線程池,這個線程池是用來處理實際的請求的,把配置文件中的初始線程數10、最大線程數200等信息傳進去,創建一個線程池executor

AbstractEndpoint.createExecutor.startAcceptorThread,他創建一個線程任務Acceptor,作為一個接收者,線程用來無限循環接受客戶端發送過來的連接請求

NioEndpoint.startInternal,創建一個線程任務Poller,用于檢測Acceptor接獸并處理成已就緒的 Socket。

2.Acceptor

Tomcat啟動完成后,客戶端發起一個請求

Acceptor的run方法,無限循環在這里接受連接請求(假如啟動后客戶端發起一個請求,這里就是第一時間捕獲到)

點進去NioEndpoint.serverSocketAccept(因為使用NIO模式),可以看到我們熟悉的nio的accept方法,這是一個阻塞的方法,會一直等待接收請求。

當Acceptor接收到客戶端的請求時,調用addEvent() 方法會將 Socket 添加到該 Poller 的 PollerEvent 隊列中。并調用了NIO中selector.wakeup方法,喚醒了Poller。到此,這一次請求中 Acceptor 的任務就完成了。

3.Poller

接著到Poller 線程了,Poller 線程1秒阻塞一次,等待有請求過來被喚醒后,每次請求先過AbstractEndpoint.processSocket

從處理器緩存中獲取當前要被執行的任務,放進任務進程,然后獲取Worker線程組,將這個任務放進去。到此 Poller 的任務就完成了。

4.Worker

然后就是到Worker線程組了,這次請求的后續的所有操作都在這個線程中完成。Worker線程是一個阻塞隊列,它繼承自AbstractQueuedSynchronizer。worker 線程被創建以后就執行 ThreadPoolExecutor 的 runWorker() 方法,試圖從 workQueue 中取待處理任務,但是一開始 workQueue 是空的,所以 worker 線程會阻塞在 workQueue.take() 方法。

當新任務添加到 workQueue后,workQueue.take() 阻塞就會結束,會返回一個 Runnable,通常是 SocketWrapperBase,然后 worker 線程調用 SocketWrapperBase的 run() 方法對 Socket 進行處理。

執行SocketWrapperBase.run

里面調用的是 doRun方法,他是抽象方法,根據當前Tomcat使用的模式是NIO還是APR去選擇執行不同的方法(默認是NIO執行NioEndpoint里的內部類SocketProcessor.doRun)

這個socket處理器先做TPC的三次握手

三次握手,這里Tomcat作為服務端,是需要響應(執行)兩次的,源碼斷點發現每次http請求這里都是執行兩次

三次握手中該方法執行兩次:

第一次執行時event對象是null,執行完是OPEN_READ,表示數據可供客戶端讀取

第二次執行時event對象是OPEN_READ,如果停用長連接,執行完返回的是CLOSE,關閉連接,否則不關閉走到下面,他是獲取協議處理器,并執行他的process方法

執行AbstractProtocol.process

可以看到他是獲取的Http11Processor,因為默認用的協議是http1.1

下面執行這個處理器的process方法

跟進去AbstractProcessorLight.process,然后到了Http11Processor.service,service方法先是從當前請求request中,解析請求行、請求頭、請求體,封裝成Request對象

下面獲取adapter(CoyoteAdaptor),調用service方法

執行CoyoteAdaptor.service

獲取到Request和Response并封裝

然后調用postParseRequest方法,在 Mapper 中查詢 URL 的映射關系

下面把封裝成的Request對象和響應的Response對象傳遞給Engine容器,然后獲取他的管道,執行里面綁定的閥門value

按順序執行多個閥門,實現對應的功能

最后執行到StandardWrapperValve.invoke

將Servlet封裝到FilterChain過濾器鏈中

他是定位到ApplicationFilterChain.doFilter,里面先是執行了Tomcat內置的過濾器

下面執行了servlet.service

然后這里就是去調用我們熟悉的HttpServlet的service方法,解析里面對應的doGet方法,或者doPost方法等等… ,也就是執行具體業務方法。

最后由Servlet將響應返回給了客戶端。

總結

到此這篇關于Tomcat處理請求的流程的文章就介紹到這了,更多相關Tomcat處理請求內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Tomcat
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
黄色不卡一区| 亚洲尤物在线| 日韩欧美中文字幕在线视频| 99久久夜色精品国产亚洲狼| 国产91欧美| 国产一区二区色噜噜| 精品视频97| 精品一区二区三区在线观看视频| 国产精品麻豆成人av电影艾秋 | yellow在线观看网址| 精品国产亚洲一区二区三区| 欧美午夜网站| 国产精品自在| 精品伊人久久| 免费污视频在线一区| 91精品高清| 免费在线观看视频一区| 久久国产精品久久久久久电车| 性欧美精品高清| 日韩有吗在线观看| 国产日韩欧美一区在线| 美女在线视频一区| 福利视频一区| 欧美va亚洲va日韩∨a综合色| 美女网站一区| 亚洲精品字幕| 91精品啪在线观看国产爱臀| 国产精品一区二区三区www| 麻豆一区二区三| 欧洲av一区二区| 在线视频日韩| **爰片久久毛片| 精品一区二区三区亚洲| 成人精品中文字幕| 国产精品日本| 国产日韩亚洲欧美精品| 国内精品麻豆美女在线播放视频| 久久久成人网| 在线观看一区| 欧美国产日本| 久久久精品久久久久久96 | 精品久久久网| 国产91精品对白在线播放| 蜜桃久久av一区| 国产精品.xx视频.xxtv| 色婷婷精品视频| 亚洲日韩视频| 国产成人精品一区二区免费看京 | 日韩精品第一| 国产精成人品2018| 日韩久久精品| 蜜桃av一区二区| 欧美黄色一区| 激情欧美亚洲| 久久激情综合网| 亲子伦视频一区二区三区| 人人爽香蕉精品| 精品国产乱码久久久久久樱花| 日本免费一区二区三区四区| 男人的天堂亚洲一区| 国产成人在线中文字幕| 美日韩精品视频| 精品国产亚洲日本| 夜夜精品视频| 国产一区二区三区探花| 老牛国产精品一区的观看方式| 美女在线视频一区| 在线一区免费观看| 精品久久福利| 天堂久久一区| 99精品网站| 国产精品久久久久久久久久久久久久久 | 国产成人77亚洲精品www| 99视频精品| 高清久久一区| 欧美片第1页综合| 红桃视频国产精品| 国产成人1区| 91精品尤物| 99在线观看免费视频精品观看| 欧美成人aaa| 蜜桃视频第一区免费观看| 欧美日韩免费看片| 久久黄色影视| 亚洲欧美日韩国产| 日韩另类视频| 精品国产一区二区三区av片| 久久午夜视频| 狠狠操综合网| 国产一区二区三区四区五区| 婷婷精品在线观看| 中国女人久久久| 黄色aa久久| 国产精品夜夜夜| 日韩高清中文字幕一区| 午夜欧美视频| 日韩毛片在线| 福利一区二区免费视频| 国产精品一区二区免费福利视频| 蜜桃视频一区二区| 日韩午夜精品| 国产精品97| 国产suv精品一区二区四区视频 | 久久国产人妖系列| 免费精品视频最新在线| 精品在线99| 久久91导航| 久久久久久色| 亚洲人成精品久久久| 亚洲激情久久| 性欧美xxxx免费岛国不卡电影| 国产传媒在线| 四虎成人av| 精品一区二区三区中文字幕| 欧美激情福利| 国产欧美啪啪| 久久激情五月激情| 欧美日韩一区二区三区不卡视频 | 日韩欧美中文在线观看| 香蕉精品999视频一区二区| 99视频精品全部免费在线视频| 中文字幕在线看片| 在线人成日本视频| 亚洲国产欧美日本视频| 国产精品蜜芽在线观看| 成人污污视频| 国产精品伊人| 久久99久久人婷婷精品综合| 91福利精品在线观看| 奇米亚洲欧美| 国产日韩欧美一区| 美女久久精品| 国产一区二区三区四区大秀| 另类综合日韩欧美亚洲| 91成人精品在线| 国产毛片精品久久| 精品午夜久久| 日韩在线综合| 欧美影院三区| 久久亚洲精品伦理| 综合一区av| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 亚洲午夜在线| 日韩视频在线一区二区三区 | 婷婷激情图片久久| 免费不卡中文字幕在线| 国产精品视区| 亚洲精品大片| 日韩高清一区在线| 久久av影视| 日韩在线中文| 亚洲欧美日韩国产一区二区| 日韩精品免费一区二区夜夜嗨| 国产精品嫩草影院在线看| 国产精品欧美三级在线观看| 精品99在线| 久久精品播放| 午夜精品福利影院| 精品网站999| 亚洲精品电影| 欧美亚洲色图校园春色| av高清不卡| 久久国产精品亚洲77777| 日韩黄色在线观看| 国产成人精品一区二区三区视频| 黑丝一区二区三区| 国产毛片精品久久| 亚洲91视频| 综合视频一区| 日本黄色精品| 免费观看日韩电影| 精品九九在线| 男女性色大片免费观看一区二区| 久久国际精品| 青青久久av| 日本 国产 欧美色综合| 国产黄色精品| 亚洲午夜黄色| 亚洲精品一区二区在线播放∴| 国产精品mv在线观看| 私拍精品福利视频在线一区| 亚洲精品高潮| 精品国产乱码久久久久久1区2匹| 自拍日韩欧美| 国产精品自拍区| av亚洲免费| 国产九一精品| 九一成人免费视频| 国产精品对白| 亚洲一区久久| 色一区二区三区四区| 亚洲精品一级| 久久国产小视频| 欧美日韩一区自拍| 在线日韩欧美| 久久xxx视频| 亚洲婷婷丁香| 欧美13videosex性极品| 欧美一区二区三区免费看| 日本国产精品|