电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

Tomcat處理請求的流程

瀏覽:179日期: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
主站蜘蛛池模板: 石牌坊价格石牌坊雕刻制作_石雕牌坊牌楼石栏杆厂家_山东嘉祥石雕有限公司 | 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 食药成分检测_调料配方还原_洗涤剂化学成分分析_饲料_百检信息科技有限公司 | 电地暖-电采暖-发热膜-石墨烯电热膜品牌加盟-暖季地暖厂家 | 天空彩票天下彩,天空彩天空彩票免费资料,天空彩票与你同行开奖,天下彩正版资料大全 | 淄博不锈钢,淄博不锈钢管,淄博不锈钢板-山东振远合金科技有限公司 | 合肥白癜风医院_合肥治疗白癜风医院_合肥看白癜风医院哪家好_合肥华研白癜风医院 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 过跨车_过跨电瓶车_过跨转运车_横移电动平车_厂区转运车_无轨转运车 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | Akribis直线电机_直线模组_力矩电机_直线电机平台|雅科贝思Akribis-杭州摩森机电科技有限公司 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 智慧钢琴-电钢琴-便携钢琴-数码钢琴-深圳市特伦斯乐器有限公司 | 飞行者联盟-飞机模拟机_无人机_低空经济_航空技术交流平台 | 电子天平-华志电子天平厂家 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 电子厂招聘_工厂招聘_普工招聘_小时工招聘信息平台-众立方招工网 | 破碎机锤头_耐磨锤头_合金锤头-鼎成机械一站式耐磨铸件定制服务 微型驱动系统解决方案-深圳市兆威机电股份有限公司 | 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 样品瓶(色谱样品瓶)百科-浙江哈迈科技有限公司 | 南昌旅行社_南昌国际旅行社_南昌国旅在线| 石家庄装修设计_室内家装设计_别墅装饰装修公司-石家庄金舍装饰官网 | 双段式高压鼓风机-雕刻机用真空泵-绍兴天晨机械有限公司 | 茶叶百科网-茶叶知识与茶文化探讨分享平台 | 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 | 作文导航网_作文之家_满分作文_优秀作文_作文大全_作文素材_最新作文分享发布平台 | 石牌坊价格石牌坊雕刻制作_石雕牌坊牌楼石栏杆厂家_山东嘉祥石雕有限公司 | 嘉兴泰东园林景观工程有限公司_花箱护栏 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 番茄畅听邀请码怎么输入 - Dianw8.com | 一技任务网_有一技之长,就来技术任务网 | 餐饮加盟网_特色餐饮连锁加盟店-餐饮加盟官网 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 神马影院-实时更新秒播|