亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Jetty 服務器架構分析(上)

系統 2177 0

jetty7 作為分析目標, Jetty 是由一個或多個 connector 核心組件以及一些列 handler 組件和一個線程池組成,看一下結構圖:

Jetty 服務器架構分析(上)

C onnector 負責監聽接收客戶連接請求,而 handler 組件則負責處理請求并給予響應,前面兩個組件工作所需要的線程資源都直接從線程池 ThreadPool 中獲取。 Jetty Server 可以有多個 connector 在不同的端口上監聽客戶請求,而每個 connector 根據具體的使用場景不同可以有不同的實現,例如采用非阻塞 NioConnector 、阻塞 SocketConnector 等等,而對于請求處理的 handler 組件,也根據具體需要可以使用不同的 handler ,此種設計提高了 jetty 的靈活性,需要 servlet ,則可以使用 servletHandler ,需要 session ,則再增加一個 sessionHandler ,也就是說我們完全可以不使用 servlet 或者 session ,只要不配置這個 handler 就行了。

要啟動和協調上訴核心組件工作, Jetty 提供了一個 Server 類來做這個事情 , 也就是說 Server 是應用的起始點,他負責創建并初始化 connector handler ThreadPool 組件,然后調用 start 方法啟動他們,讓所有組件都處于待命狀態,因此 Server 類是一個比較重要的 Fa?ade, 值得注意的 Server 類本身也是一個 handler.

一、 組件生命周期

jetty 來說,每個組件都有其生命周期, jetty 采用了統一的 LifeCyle 接口來控制,我們來看下,類圖結構:

Jetty 服務器架構分析(上)

c onnector,handler 等組件全部都直接或間接實現了 LifeCyle 接口,剛才說了 Server 也是 Handler ,同時他也是啟動或協調組件工作的類,也就是說 Server 可以通過 LifeCyle 接口控制其他組件的生命周期,通過 start 方法可以啟動 server, 通過 stop 則關閉了 server

二、 Connector 組件

Jetty 服務器架構分析(上)

Connnetor 在實現上有 NIO BIO 兩種實現方式,并且支持 AJP 協議、和 SSL

三、 Handler 組件

Jetty 服務器架構分析(上)

所有的 handler 組件都實現了 Handler 接口,可以看到, Handler 是可以以鏈表的形式相互組合的, Server 作為服務入口,本身也是 handler ,他繼承了 HandlerWrapper 接口,我們看以看到他帶了一個 handler 的引用變量,我們可以注入 ServletHandler 支持 servlet, 注入 WebAppContext 則支持我們的 webapp 應用。

四、 啟動過程

先看下 jetty 的目錄結構

Jetty 服務器架構分析(上)

看幾個主要目錄的含義,

Bin 目錄定義了啟動 jetty 需要的 sh 文件,主要用在 linux 中, windows 中可以直接 java start.jar 啟動服務器,

Contexts 目錄主要放置跟應用相關的 context 配置文件,跟應用相關

etc 目錄放置跟服務器相關的配置文件,其中會定義 contexts 目錄所在的位置

lib 是服務器所需要的 jar

webapps 是放置應用程序的位置,當然也可以通過在 contexts 中或者 etc 中自定義

我們從外部啟動一個 jetty 服務器的過程:

Jetty 服務器架構分析(上)

首先從 Start.jar 開始,這個 jar 定義了解析命令行的 Main 這個類, Main 主要負責解析 start.ini 配置文件 ,start.ini 中定義了 JVM 需要的參數以及 etc 目錄中用到的 xml 配置文件,如下圖:

Jetty 服務器架構分析(上)

然后由 Config 類解析出 stat.ini OPTIONS 選項指定的模塊的包的位置用來加入到 classpath 中,這些模塊的包都定義在 start.config 文件中 ( 該文件可以在 start.jar 包中找到 ) ,截取一個片段給大家看下:

Jetty 服務器架構分析(上)

這個文件的配置是需要有一定的語法在里面的,有興趣的可以研究一下,也就是說,通過在 start.ini 中定義 OPTIONS 以及在 start.config 中定義模塊路徑就可以確定把哪些 jar 加入到環境變量中。

以上準備工作做完之后,就可以真正開始服務器的處理了,這時你有兩種選擇,第一種是在本進程中通過反射方式啟動,但是缺點是 start.ini 中配置的 JVM 參數就形同虛設了,因為 java 進程已經起來了,不能再按照新的堆參數等重新設置了;第二種方式就是重新啟動一個進程,就可以重新設置參數,前面說了, start.ini 中得到了啟動參數, start.config 中有了 MainClass Classpath 需要的 jar 包,則可以直接用 java xxx 方式啟動了,要使用這種方式啟動,只需要在 start.ini 中配置 –exec 參數即可。

MainClass 默認是 XmlConfigration 類,當然自定義的話,可以在 start.config 中去更改, XmlConfigration 做幾件事情: 1 、根據 start.ini 中的定義的配置文件進行解析 , 例如 etc/jetty.xml 2 、通過自己的 IOC 將這些服務組件組裝在一起 3 、最后調用 start 方法啟動這些組件。

==========================

未完待續.....

Jetty 服務器架構分析(上)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲高清不卡视频 | 国产福利视频 | 哥也操| 日韩美在线 | 狠狠色噜噜狠狠狠狠97影音先锋 | 久久美女网| 中文字幕日本在线 | 久久美女免费视频 | 九九伦理| 亚洲精品成人456在线播放 | 亚洲一区二区三区视频 | 国产一区欧美二区 | 国产欧美日韩精品一区二 | 久久精品国产亚洲高清 | 国产精品综合一区二区三区 | 特级一级全黄毛片免费 | 欧美大片一区 | 久热中文| 伊人激情久久综合中文字幕 | 四虎国产永久在线精品免费观看 | 综合另类小说色区色噜噜 | 国产亚洲日本人在线观看 | a在线观看免费视频 | 在线播放免费一级毛片欧美 | 26uuu另类欧美亚洲曰本 | 久久99久久99精品免观看不卡 | 国产成人高清精品免费观看 | 中文字幕久久亚洲一区 | 中国国产一国产一级毛片视频 | 日日摸夜夜摸狠狠摸日日碰夜夜做 | 国产成人一区二区三区 | 中文字幕日韩一区二区三区不 | 中国女人内谢25xxxxx | 亚洲成a人v大片在线观看 | 欧美五月婷婷 | 可以免费观看的一级毛片 | 欧美亚洲国产色综合 | 伊人久久成人爱综合网 | 日韩中文字幕精品视频在线 | 五月天堂婷婷 | 国产网红精品 |