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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Tomcat處理請(qǐng)求的流程

瀏覽:328日期:2023-09-08 20:45:27
目錄一、組件詳解二、請(qǐng)求處理流程1.總體流程圖2.Worker線程任務(wù)流程三、源碼跟蹤1.Tomcat啟動(dòng)線程組件2.Acceptor3.Poller4.Worker總結(jié)一、組件詳解

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

Acceptor

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

Poller

一個(gè)線程任務(wù),用于監(jiān)聽(tīng) Socket 事件,當(dāng)有任務(wù)來(lái)臨時(shí),將 Socket 封裝,添加到 worker 線程池的任務(wù)隊(duì)列中。

Worker

他是創(chuàng)建一組線程的,每個(gè)線程任務(wù)都是一個(gè)阻塞隊(duì)列,用于對(duì)請(qǐng)求進(jìn)行處理(例如我們中間件參數(shù)中的最大線程數(shù)就是指最多創(chuàng)建多少個(gè)Worker線程)。每個(gè)Worker線程任務(wù)包括分析解析請(qǐng)求報(bào)文、創(chuàng)建 Request 對(duì)象、調(diào)用容器的 管道pipeline 執(zhí)行閥門(mén)value、執(zhí)行servlet的具體邏輯。

二、請(qǐng)求處理流程1.總體流程圖

2.Worker線程任務(wù)流程

三、源碼跟蹤1.Tomcat啟動(dòng)線程組件

Tomcat啟動(dòng)時(shí),如果默認(rèn)使用NIO模式,先是執(zhí)行了AbstractEndpoint.initServerSocket,通過(guò) ServerSocketChannel.open() 打開(kāi)一個(gè) ServerSocket通道,默認(rèn)綁定到 8080 端口,用于監(jiān)聽(tīng)請(qǐng)求。

說(shuō)明:在Java語(yǔ)言的NIO中,類ServerSocketChannel就是用來(lái)處理TPC連接的客戶端,他的open方法就是用例建立一個(gè)TPC連接。

然后Tomcat會(huì)創(chuàng)建Worker 線程池、Acceptor線程、Poller線程:

AbstractEndpoint.createExecutor,用于創(chuàng)建 Worker 線程池,這個(gè)線程池是用來(lái)處理實(shí)際的請(qǐng)求的,把配置文件中的初始線程數(shù)10、最大線程數(shù)200等信息傳進(jìn)去,創(chuàng)建一個(gè)線程池executor

AbstractEndpoint.createExecutor.startAcceptorThread,他創(chuàng)建一個(gè)線程任務(wù)Acceptor,作為一個(gè)接收者,線程用來(lái)無(wú)限循環(huán)接受客戶端發(fā)送過(guò)來(lái)的連接請(qǐng)求

NioEndpoint.startInternal,創(chuàng)建一個(gè)線程任務(wù)Poller,用于檢測(cè)Acceptor接獸并處理成已就緒的 Socket。

2.Acceptor

Tomcat啟動(dòng)完成后,客戶端發(fā)起一個(gè)請(qǐng)求

Acceptor的run方法,無(wú)限循環(huán)在這里接受連接請(qǐng)求(假如啟動(dòng)后客戶端發(fā)起一個(gè)請(qǐng)求,這里就是第一時(shí)間捕獲到)

點(diǎn)進(jìn)去NioEndpoint.serverSocketAccept(因?yàn)槭褂肗IO模式),可以看到我們熟悉的nio的accept方法,這是一個(gè)阻塞的方法,會(huì)一直等待接收請(qǐng)求。

當(dāng)Acceptor接收到客戶端的請(qǐng)求時(shí),調(diào)用addEvent() 方法會(huì)將 Socket 添加到該 Poller 的 PollerEvent 隊(duì)列中。并調(diào)用了NIO中selector.wakeup方法,喚醒了Poller。到此,這一次請(qǐng)求中 Acceptor 的任務(wù)就完成了。

3.Poller

接著到Poller 線程了,Poller 線程1秒阻塞一次,等待有請(qǐng)求過(guò)來(lái)被喚醒后,每次請(qǐng)求先過(guò)AbstractEndpoint.processSocket

從處理器緩存中獲取當(dāng)前要被執(zhí)行的任務(wù),放進(jìn)任務(wù)進(jìn)程,然后獲取Worker線程組,將這個(gè)任務(wù)放進(jìn)去。到此 Poller 的任務(wù)就完成了。

4.Worker

然后就是到Worker線程組了,這次請(qǐng)求的后續(xù)的所有操作都在這個(gè)線程中完成。Worker線程是一個(gè)阻塞隊(duì)列,它繼承自AbstractQueuedSynchronizer。worker 線程被創(chuàng)建以后就執(zhí)行 ThreadPoolExecutor 的 runWorker() 方法,試圖從 workQueue 中取待處理任務(wù),但是一開(kāi)始 workQueue 是空的,所以 worker 線程會(huì)阻塞在 workQueue.take() 方法。

當(dāng)新任務(wù)添加到 workQueue后,workQueue.take() 阻塞就會(huì)結(jié)束,會(huì)返回一個(gè) Runnable,通常是 SocketWrapperBase,然后 worker 線程調(diào)用 SocketWrapperBase的 run() 方法對(duì) Socket 進(jìn)行處理。

執(zhí)行SocketWrapperBase.run

里面調(diào)用的是 doRun方法,他是抽象方法,根據(jù)當(dāng)前Tomcat使用的模式是NIO還是APR去選擇執(zhí)行不同的方法(默認(rèn)是NIO執(zhí)行NioEndpoint里的內(nèi)部類SocketProcessor.doRun)

這個(gè)socket處理器先做TPC的三次握手

三次握手,這里Tomcat作為服務(wù)端,是需要響應(yīng)(執(zhí)行)兩次的,源碼斷點(diǎn)發(fā)現(xiàn)每次http請(qǐng)求這里都是執(zhí)行兩次

三次握手中該方法執(zhí)行兩次:

第一次執(zhí)行時(shí)event對(duì)象是null,執(zhí)行完是OPEN_READ,表示數(shù)據(jù)可供客戶端讀取

第二次執(zhí)行時(shí)event對(duì)象是OPEN_READ,如果停用長(zhǎng)連接,執(zhí)行完返回的是CLOSE,關(guān)閉連接,否則不關(guān)閉走到下面,他是獲取協(xié)議處理器,并執(zhí)行他的process方法

執(zhí)行AbstractProtocol.process

可以看到他是獲取的Http11Processor,因?yàn)槟J(rèn)用的協(xié)議是http1.1

下面執(zhí)行這個(gè)處理器的process方法

跟進(jìn)去AbstractProcessorLight.process,然后到了Http11Processor.service,service方法先是從當(dāng)前請(qǐng)求request中,解析請(qǐng)求行、請(qǐng)求頭、請(qǐng)求體,封裝成Request對(duì)象

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

執(zhí)行CoyoteAdaptor.service

獲取到Request和Response并封裝

然后調(diào)用postParseRequest方法,在 Mapper 中查詢 URL 的映射關(guān)系

下面把封裝成的Request對(duì)象和響應(yīng)的Response對(duì)象傳遞給Engine容器,然后獲取他的管道,執(zhí)行里面綁定的閥門(mén)value

按順序執(zhí)行多個(gè)閥門(mén),實(shí)現(xiàn)對(duì)應(yīng)的功能

最后執(zhí)行到StandardWrapperValve.invoke

將Servlet封裝到FilterChain過(guò)濾器鏈中

他是定位到ApplicationFilterChain.doFilter,里面先是執(zhí)行了Tomcat內(nèi)置的過(guò)濾器

下面執(zhí)行了servlet.service

然后這里就是去調(diào)用我們熟悉的HttpServlet的service方法,解析里面對(duì)應(yīng)的doGet方法,或者doPost方法等等… ,也就是執(zhí)行具體業(yè)務(wù)方法。

最后由Servlet將響應(yīng)返回給了客戶端。

總結(jié)

到此這篇關(guān)于Tomcat處理請(qǐng)求的流程的文章就介紹到這了,更多相關(guān)Tomcat處理請(qǐng)求內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Tomcat
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲人成毛片在线播放女女| 最新国产精品| 在线人成日本视频| 亚洲婷婷丁香| 中文在线资源| 久久亚洲风情| 国产精品扒开腿做爽爽爽软件| 国产精品嫩模av在线| 国产一区二区三区四区五区传媒| 欧美日中文字幕| 蜜桃成人av| 国产精品一区二区精品| 亚洲成人二区| 免费观看亚洲| 日韩在线观看中文字幕| 欧美精品一卡| 7m精品国产导航在线| 国产精品片aa在线观看| 99精品美女| 天堂久久一区| 999精品在线| 久久国产人妖系列| 精品久久97| 福利一区二区免费视频| 国产农村妇女精品一二区| 91一区二区| 深夜视频一区二区| 欧美一区在线观看视频| 欧美91在线| 亚洲精品系列| 久久精品国产在热久久| 尤物在线精品| 精品国产日韩欧美精品国产欧美日韩一区二区三区| 激情五月综合| 精品国产精品久久一区免费式| 国产国产精品| 日韩精品一区二区三区免费观看| 国产精品激情| 亚洲作爱视频| 999久久久亚洲| 精品国产精品国产偷麻豆| 日欧美一区二区| 亚洲精品国产偷自在线观看| 亚州av乱码久久精品蜜桃| 日韩成人综合| 亚洲三级视频| 国产模特精品视频久久久久| 成人午夜国产| 久久先锋影音| 国产99久久| 婷婷亚洲五月色综合| 黑森林国产精品av| 亚洲3区在线| 日本不卡免费高清视频在线| 久久爱www成人| 日韩精品91亚洲二区在线观看| 国产精品婷婷| 丝袜a∨在线一区二区三区不卡| 国产精品成人自拍| 欧美黑人巨大videos精品| 亚洲免费观看高清完整版在线观| 精品国模一区二区三区| 国产v日韩v欧美v| 精品国产一级| 欧美一区在线观看视频| 免费精品视频最新在线| 极品日韩av| 亚洲天堂成人| 日韩高清成人| 欧美一级二级三级视频| 亚州av一区| 亚洲a成人v| 亚洲人亚洲人色久| 亚洲精品网址| 亚洲资源av| 99riav1国产精品视频| 一区在线视频观看| 亚洲一区久久| 日本不卡的三区四区五区| 日本aⅴ亚洲精品中文乱码| 日韩美女精品| 国产精品久久| 色天使综合视频| 久久久水蜜桃av免费网站| 久久九九国产| 首页国产欧美久久| 日本精品在线播放| 欧美日韩夜夜| 久久午夜精品| 日韩av网站在线观看| 欧美激情日韩| 另类小说一区二区三区| 国产99在线| 久久亚洲精品中文字幕| 国产极品嫩模在线观看91精品| 日韩激情综合| 美国欧美日韩国产在线播放| 99日韩精品| 日韩中文字幕一区二区三区| 在线日韩一区| 亚洲深夜影院| 亚洲免费毛片| 欧美日本二区| 国产视频一区免费看| 欧美成人国产| 欧美日韩免费观看一区=区三区| 伊人精品一区| 一本一道久久a久久精品蜜桃| 欧美成人亚洲| 亚洲午夜国产成人| 日韩精品一级中文字幕精品视频免费观看 | 日本a口亚洲| 国产三级一区| 国产免费av国片精品草莓男男| 欧美久久精品| 精品国产乱码久久久久久樱花| 国产精品1区| 欧美激情日韩| jizzjizz中国精品麻豆| 欧美丝袜一区| 综合精品一区| 国产精品.xx视频.xxtv| 久久一区精品| 久久国产电影| 日韩影院精彩在线| 性欧美精品高清| 日韩高清电影免费| 欧美亚洲人成在线| 精品久久免费| 黄色日韩在线| 国产精品久久久久久妇女| 激情视频网站在线播放色| 五月天激情综合网| 日韩欧美中文字幕电影| 久久av国产紧身裤| 欧美一区二区三区高清视频| 日本亚洲最大的色成网站www| 国产精品4hu.www| 日韩精品一卡| 综合激情一区| 国产精品对白| 久久久久国产| 午夜久久av | 亚洲精品在线a| 国产精品传媒麻豆hd| 99久久婷婷| 蘑菇福利视频一区播放| 国产亚洲精品精品国产亚洲综合 | 日韩高清在线不卡| 成人在线免费观看91| 亚洲一级网站| 一区二区视频欧美| 国产福利资源一区| av不卡在线看| 精品美女视频| 日韩欧美四区| 免费av一区| 国产一区二区三区四区五区| 亚洲精品无吗| 亚洲性色视频| 精品一区二区三区中文字幕| 久久亚洲美女| 欧美日韩水蜜桃| 捆绑调教美女网站视频一区| 蜜桃av一区二区| 国产成人久久精品麻豆二区| 欧美在线亚洲综合一区| 国产精品一区二区美女视频免费看| 国产精品一区二区99| 日韩亚洲在线| 精品深夜福利视频| 日韩三级精品| 免播放器亚洲| av资源亚洲| 蜜桃久久久久| 日本午夜免费一区二区| 亚洲精品97| 天堂中文av在线资源库| 91亚洲无吗| 亚洲欧美日韩国产| 日韩精品免费一区二区在线观看 | 精品久久久网| 日本在线视频一区二区| 午夜久久美女| 欧美色图一区| 美女网站视频一区| 国产精品福利在线观看播放| 欧美精品观看| 日本欧美一区二区在线观看| 首页欧美精品中文字幕| 在线视频免费在线观看一区二区| 视频二区不卡| av综合电影网站| 国产劲爆久久| 国产精品入口久久| 久久亚洲国产精品一区二区| 日韩一区二区久久| 亚洲成av在线| 黄色成人在线网址| 蜜桃av在线播放|