久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Mozilla研究—傳輸協(xié)議...

 xiaoqdu 2008-11-24

mozilla 是一個以瀏覽器為中心的軟件平臺,它在我們平臺中占有重要地位,。我們用它來實(shí)現(xiàn)WEB瀏覽器,、WAP瀏覽器、郵件系統(tǒng),、電子書和幫助閱讀器等應(yīng)用程序,。為 此,我最近花了不少時間去閱讀mozilla的代碼和文檔,,我將寫一系列的BLOG作為筆記,,供有需要的朋友參考。本文介紹一下傳輸協(xié)議,。

 

Mozilla 瀏覽器作為HTTP協(xié)議的客戶端,,它與HTTP服務(wù)器(如Apache和IIS等)通信,進(jìn)行數(shù)據(jù)下載和上傳,,自然要用到HTTP協(xié)議了,。不過HTTP協(xié) 議只是Mozilla所支持的眾多協(xié)議的一種,這些協(xié)議有的是網(wǎng)絡(luò)協(xié)議,,比如HTTP,,有的是本地協(xié)議,如file,,還有的是虛擬協(xié)議,,比如about。

 

我們說過,針對接口編程是Mozilla的重要特色之一,,這里便是最好的例證:所有協(xié)議都要實(shí)現(xiàn)nsIProtocolHandler接口,,使用者由nsIProtocolHandler請求所需要的服務(wù),,而不關(guān)心具體的實(shí)現(xiàn)。通過URL中的Scheme自然的映射到具體協(xié)議的ContractID上,,然后由組件管理器創(chuàng)建協(xié)議的實(shí)例,。

 

nsIProtocolHandler的主要接口函數(shù)有:

1.         GetScheme 得到協(xié)議的Scheme,這里的Scheme其實(shí)就是協(xié)議的名稱,,比如http,,httpsftp等等。

2.         GetDefaultPort 得到協(xié)議的默認(rèn)端口,,比如http協(xié)議的默認(rèn)端口是80,,https協(xié)議的默認(rèn)端口是443

3.         NewURI 創(chuàng)建一個nsIURI接口的實(shí)例,。

4.         NewChannel 根據(jù)提供的nsIURI創(chuàng)建一個Channel,,Channel是客戶端與服務(wù)器端之間連接的抽象,但不能直接從Channel中獲取數(shù)據(jù),。獲取數(shù)據(jù)的方式有兩種:其一是調(diào)用Open得到nsIInputStream對象,,再從nsIInputStream對象中讀取數(shù)據(jù)。其二是調(diào)用AsyncOpen注冊一個nsIStreamListener對象,,當(dāng)Channel中有數(shù)據(jù)可用時,,Channel會通知nsIStreamListener對象讀取數(shù)據(jù)。

 

Mozilla中,,實(shí)現(xiàn)的協(xié)議主要有:

1.         nsHttpHandler 實(shí)現(xiàn)HTTP(S)協(xié)議,,這是mozilla中最重要也是最復(fù)雜的協(xié)議,HTTP協(xié)議看似簡單,,不過要完整實(shí)現(xiàn)可不容易,。比如處理ResCode 100,重定向,,認(rèn)證和Chunked數(shù)據(jù)等等,,都是比較麻煩的。

2.         nsFtpProtocolHandler 實(shí)現(xiàn)FTP協(xié)議,,mozilla能夠像瀏覽網(wǎng)頁一樣,,在瀏覽器中瀏覽FTP網(wǎng)站。FTP返回的結(jié)果是文本格式,,不能直接在瀏覽器中瀏覽,,要經(jīng)過nsFTPDirListingConv轉(zhuǎn)換之后才能顯示。

3.         nsDataHandler 實(shí)現(xiàn)Data協(xié)議,,它用來解碼URL中的BASE64編碼,,感覺用處不大。

4.         nsAboutProtocolHandler 實(shí)現(xiàn)About協(xié)議,。用來顯示瀏覽器本身的一些信息,,比如,,about:plugins用來顯示已經(jīng)安裝的插件,about:config用來顯示和修改配置信息,,about:buildconfig用來顯示編譯配置信息,,about:cache用來顯示cache信息等等。

5.         nsFileProtocolHandler 實(shí)現(xiàn)file協(xié)議,,用來瀏覽本地文件,,可以當(dāng)簡單的文件管理器使用。

6.         nsKeywordProtocolHandler 實(shí)現(xiàn)Keyword協(xié)議,,它只是對HTTP協(xié)議的包裝,,它到指定的URL上去查詢某個關(guān)鍵字,估計(jì)可以當(dāng)作搜索引擎使用,。

7.         nsViewSourceHandler 實(shí)現(xiàn)ViewSource協(xié)議,,它是對其它協(xié)議的包裝,用來顯示HTML源代碼,。

8.         nsChromeProtocolHandler 實(shí)現(xiàn)Chrome協(xié)議,Chromemozilla自己的協(xié)議,,它用來訪問自己的資源文件,,像localeskinXUL等等,。它通過配置文件把chrome URI映射到物理文件上,。

 

Mozilla還有其它一些協(xié)議的實(shí)現(xiàn),而且它還可以通過GNomeVFS來支持更多協(xié)議,,這里就不多說了,。

 

為了避免與框架的耦合,以上這些協(xié)議的實(shí)現(xiàn)都是通過Factory來創(chuàng)建的,。在build/nsNetModule.cppbuild2/nsNetModule.cpp定義了這些協(xié)議實(shí)現(xiàn)的ComponentInfo,,再通過一些宏和GenericFactory包裝生成自己的Factory

 

所有這些協(xié)議都是作為服務(wù)提供的,,也就是說在整個系統(tǒng)中只有一份實(shí)例存在,。在第一次使用該協(xié)議時創(chuàng)建其實(shí)例,使用完后并不銷毀,,后來再使用時,,就取第一次創(chuàng)建的實(shí)例。

 

URL到協(xié)議實(shí)現(xiàn)的匹配過程是在nsIOService::GetProtocolHandler里完成的,。因?yàn)閰f(xié)議實(shí)現(xiàn)的mContractID都是以"@mozilla.org/network/protocol;1?name="開頭,,后面再附加協(xié)議的Scheme,所以很容易從URL對應(yīng)的協(xié)議實(shí)現(xiàn)上,。

 

~~end~~

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多