默認(rèn)連接器的UML圖和流程分析(技術(shù)交流)

本篇文章轉(zhuǎn)自電子發(fā)燒友網(wǎng)站,意在分享給本網(wǎng)的用戶查閱,內(nèi)容比較專業(yè)生僻,如果您閱讀過程中有存在疑惑的地方,可以撥打我們的電話向工防師進(jìn)行咨詢,咨詢熱線電話:0769-81153906。

一、UML圖:

1、所有的連接器都要實現(xiàn)Connector接口,必須創(chuàng)建Request對象和Response對象,httpConnector作為默認(rèn)連接器,肯定也是要實現(xiàn)Connector接口的,同時httpConnector. createRequest方法創(chuàng)建了Request對象,httpConnector. createResponse方法創(chuàng)建了Response對象;

2、httpConnector接收到客戶端請求后,解析請求參數(shù)、解析請求header信息、創(chuàng)建Response和Request對象如果放在Connector里面處理,勢必會影響到后續(xù)其他客戶端請求的及時響應(yīng),因此tomcat采取了HttpProcessor對象來進(jìn)行這些后續(xù)處理,而且HttpProcessor是在單獨的線程里面運行,不會卡住主線程,再有新的客戶端請求到達(dá)時,會創(chuàng)建新的HttpProcessor對象并開啟新的線程運行,這樣就能保證連接器能高效及時的響應(yīng)客戶端請求;

3、httpConnector類維護(hù)著一個HttpProcessor的實例池,同時還有池的最小和最大個數(shù)的變量,如下:

在start方法啟動連接器時,會初始化minProcessors個HttpProcessor對象放到processors池子里面:

創(chuàng)建HttpProcessor對象時,如果池子里有未使用的HttpProcessor對象,則直接從池子里面取,如果當(dāng)前正在運行的HttpProcessor對象大于最大個數(shù),則丟掉請求不處理,否則創(chuàng)建一個HttpProcessor對象并放到池子里,然后返回這個HttpProcessor對象:

1、Request對象封裝了客戶端的請求信息,Response對象封裝了返回給客戶端的響應(yīng)信息;

2、HttpRequestImpl類是Request接口的實現(xiàn)類,cookies數(shù)組成員變量存儲了請求的cookie信息,headers變量是一個hashMap類型,存儲了請求head信息的鍵值對,parameters存儲了相關(guān)參數(shù)的鍵值對,這是一個ParameterMap類型的hash表類型,比hashMap封裝擴(kuò)展了鎖定屬性;

3、為避免servlet程序員拿到request對象,因為權(quán)限過大而造成安全問題,這里采用了門面模式封裝了一個HttpRequestFacade對象,其所有功能都委托給Request對象實現(xiàn),但是HttpRequestFacade提供的接口有限,將其提供給servlet程序員不會造成安全問題;

4、同樣的,HttpResponseImpl類是Response接口的實現(xiàn)類,HttpResponseFacade作為HttpResponseImpl的門面對象提供給servlet程序員使用,從而很好的解決了安全性問題;

二、流程分析:

1、httpConnector連接器實現(xiàn)了Runnable接口,也就是說他是運行在一個線程里面的,run方法作為線程的運行方法,首先調(diào)用ServerSocketFactory.createSocket創(chuàng)建一個ServerSocket對象,并且默認(rèn)在8080端口上監(jiān)聽,然后調(diào)用ServerSocket.accept在8080端口等待客戶端請求并阻塞線程;

2、如果有客戶端連接請求到達(dá),則httpConnector從accept處返回,然后調(diào)用CreateHttpProcessor創(chuàng)建HttpProcessor對象;

3、在創(chuàng)建HttpProcessor對象時,在HttpProcessor構(gòu)造函數(shù)里面創(chuàng)建HttpRequest對象和HttpResponse對象;

4、httpConnector在調(diào)用CreateHttpProcessor后,會將服務(wù)器與客戶端連接的socket對象賦值給HttpProcessor對象,然后調(diào)用HttpProcessor.start方法,由于HttpProcessor也實現(xiàn)了Runnable接口,因此在start方法里面就將HttpProcessor放到線程里運行;

5、HttpProcessor線程的run方法里面,首先獲取剛才賦值的socket對象(如果socket為null則會阻塞到socket被賦值),然后對request請求調(diào)用parseConnecTIon, parseRequest, parseHeaders解析請求信息并設(shè)置request的成員變量;

6、最后將request和response對象傳遞給Container.invoke方法,將后續(xù)的請求處理交給Container容器處理;

關(guān)于“默認(rèn)連接器的UML圖和流程分析”就介紹到這了,更多關(guān)于連接器的專業(yè)技術(shù)文章,德索工防師會陸續(xù)整理更新發(fā)布在我們的資訊頻道上面。德索五金電子,是一家專業(yè)的電子連接器制造商,至今已有十三年的連接器生產(chǎn)設(shè)計歷史,我們所產(chǎn)的連接器銷往全世界40多個國家和地區(qū),深受國內(nèi)外用戶的好評。同時,德索的連接器產(chǎn)品均通過了ISO認(rèn)證,符合國際環(huán)保要求,值得每一位用戶的信賴。

德索主打的射頻連接器已經(jīng)名聲在外,口碑持續(xù)發(fā)酵,銷量節(jié)節(jié)攀升,市場占有率不斷擴(kuò)大,目前可以說是射頻領(lǐng)域中的佼佼者。任何您想要的射頻相關(guān)產(chǎn)品,比如bnc、sma、smb、mmcx、f頭、n頭等,均接受大批量定制的服務(wù),自有生產(chǎn)基地,無需排單,交期及時。

本文來源:http://gdylhg.cn/7653.html