<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ann
    冰是沒(méi)有未來(lái)的,因?yàn)樗挠篮?/span>
    posts - 107,comments - 34,trackbacks - 0
    服務(wù)器推送(Server Push)

    推送技術(shù)的基礎(chǔ)思想是將瀏覽器主動(dòng)查詢信息改為服務(wù)器主動(dòng)發(fā)送信息。服務(wù)器發(fā)送一批數(shù)據(jù),瀏覽器顯示這些數(shù)據(jù),同時(shí)保證與服務(wù)器的連接。當(dāng)服務(wù)器需要再次發(fā)送一批數(shù)據(jù)時(shí),瀏覽器顯示數(shù)據(jù)并保持連接。以后,服務(wù)器仍然可以發(fā)送批量數(shù)據(jù),瀏覽器繼續(xù)顯示數(shù)據(jù),依次類推。

    客戶端拉曳(Client Pull)

    在客戶端拖曳技術(shù)中,服務(wù)器發(fā)送一批數(shù)據(jù),在HTTP響應(yīng)或文檔頭標(biāo)記中插入指令,讓瀏覽器“在5秒內(nèi)再次裝入這些數(shù)據(jù)”或“10秒內(nèi)前往某URL裝入數(shù)據(jù)”。當(dāng)指定的時(shí)間達(dá)到時(shí),客戶端就按照服務(wù)器的指示去做,或者刷新當(dāng)前數(shù)據(jù),或者調(diào)入新的數(shù)據(jù)。

    其實(shí)push 和 pull 這兩種技術(shù)手段非常不同,但目的幾乎一致,都是為了給最終用戶方便的提供最新信息。

    在服務(wù)器推送技術(shù)中,HTTP 連接一直保持著,直到服務(wù)器知道自己已結(jié)束發(fā)送數(shù)據(jù)并發(fā)送一個(gè)結(jié)束信號(hào),或者客戶端中斷連接。而在客戶端拖曳技術(shù)中,并不保持HTTP連接,相反,客戶端被告知合時(shí)建立新連接,以及建立連接是獲取什么數(shù)據(jù)。

    在服務(wù)器推送中,奇妙之處在于“multipart/mixed”格式的MIME,它能夠使一個(gè)報(bào)文(或HTTP響應(yīng))包含許多數(shù)據(jù)項(xiàng)、在客戶端拖曳中,奇妙之處在于HTTP響應(yīng)頭標(biāo)(或等效的HTML元素),它能告知客戶端在指定的延時(shí)時(shí)間后執(zhí)行何種動(dòng)作。

    服務(wù)器推送通常效率要比客戶端拖曳效率高,因?yàn)樗槐貫楹罄m(xù)數(shù)據(jù)建立新的連接。由于始終保持連接,即使沒(méi)有數(shù)據(jù)傳輸時(shí)也是這樣,因此服務(wù)器必須愿意分配這些TCP/IP端口,對(duì)于TCP/IP端口數(shù)有限的服務(wù)器這將是一個(gè)嚴(yán)重的問(wèn)題。

    客戶端拖曳效率低,因?yàn)檫@必須每次為傳送數(shù)據(jù)建立新的連接。但是它不必始終保持連接。

    在實(shí)際情況中,建立HTTP連接通常需要花費(fèi)相當(dāng)多的時(shí)間,多達(dá)一秒甚至更多。因此從性能上考慮,服務(wù)器推送對(duì)于最終用戶更有吸引力,特別是對(duì)于需要經(jīng)常更新信息的情況下。

    服 務(wù)器推送相對(duì)客戶端拖曳的另一點(diǎn)優(yōu)勢(shì)是,服務(wù)器推送相對(duì)比較容易控制。例如,服務(wù)器每一次推送時(shí)都保持一個(gè)連接,但它又隨時(shí)可以關(guān)閉其中的任何連接,而不 需要在服務(wù)器上設(shè)置特殊的算法。而客戶端拖曳在同樣的情況下要麻煩許多,它每次要與服務(wù)器建立連接,服務(wù)器為了處理將客戶端拖曳請(qǐng)求與特定的最終用戶匹配 等情況,需要使用相當(dāng)麻煩的算法。

    如果實(shí)現(xiàn)服務(wù)器推送的CGI程序是使用Shell腳本語(yǔ)言編寫(xiě)的,有時(shí)會(huì)存在一些問(wèn)題。例如,客戶 端最終用戶中斷連接,Shell程序通常不能注意到,這將使資源毫無(wú)用處的浪費(fèi)掉,解決這一問(wèn)題的辦法是用Perl或者C來(lái)編寫(xiě)這類CGI程序,以使用戶 中斷連接時(shí)能夠結(jié)束運(yùn)行。


    如上所述,在服務(wù)器推送中,多個(gè)響應(yīng)中連接始終保持,使服務(wù)器可在任何時(shí)間發(fā)送更多的數(shù)據(jù)。一個(gè)明顯的好處是服務(wù)器完全能夠控制更新數(shù)據(jù)的時(shí)間和頻率。另外,這種方法效率高,因?yàn)槭冀K保持連接。缺點(diǎn)是保持連接狀態(tài)會(huì)浪費(fèi)服務(wù)器端的資源。服務(wù)器推送還比較容易中斷。

    接下來(lái)就大概說(shuō)說(shuō)服務(wù)器推送技術(shù)
    服 務(wù)器在響應(yīng)請(qǐng)求時(shí),HTTP使用MIME報(bào)文格式來(lái)封裝數(shù)據(jù)。通常一個(gè)HTTP響應(yīng)只能包含一個(gè)數(shù)據(jù)塊。但MIME有一種機(jī)制可用一個(gè)報(bào)文(或HTTP響 應(yīng))表示將多個(gè)數(shù)據(jù)塊,這種機(jī)制就是成為“multipart/mixed”的標(biāo)準(zhǔn)MIME類型。multipart/mixed報(bào)文大體格式如下:
    Content-type:multipart/mixed;boundary=ThisRandomString
    --ThisRandomString
    Content-type:text/plain
    第一個(gè)對(duì)象的數(shù)據(jù)。
    --ThisRandomString
    Content-type:text/plain
    第二個(gè)對(duì)象的數(shù)據(jù)。
    --ThisRandomString--

    上述報(bào)文包括兩上數(shù)據(jù)塊,二者的類型都是“text/plain”。最后一個(gè)“ThisRandomString”后的兩條短線(--)表示報(bào)文結(jié)束,后面沒(méi)有數(shù)據(jù)。

    對(duì) 于服務(wù)器推送,使用一個(gè)“multipart/mixed”類型的變種--multipart/x-mixed-replace。這里,“x-”表示屬于 實(shí)驗(yàn)類型。“replace”表示每一個(gè)新數(shù)據(jù)塊都會(huì)代替前一個(gè)數(shù)據(jù)塊。也就是說(shuō),新數(shù)據(jù)不是附加到舊數(shù)據(jù)之后,而是替代它。

    下面是實(shí)際使用的“multipart/x-mixed-replace”類型:
    Content-type:multipart/x-mixed-replace;boundary=ThisRandomString
    --ThisRandomString
    Content-type:text/plain
    第一個(gè)對(duì)象的數(shù)據(jù)
    --ThisRandomString
    Content-type:text/plain
    第二個(gè)(最后一個(gè))對(duì)象的數(shù)據(jù)。
    --ThisRandomString--
    使用這一技術(shù)的關(guān)鍵是,服務(wù)器并不是推送整個(gè)“multipart/x-mixed-replace”報(bào)文,而是每次發(fā)送后數(shù)據(jù)塊。
    HTTP 連接始終保持,因而服務(wù)器可以按自己需要的速度和頻率推送新數(shù)據(jù),兩個(gè)數(shù)據(jù)塊之間瀏覽器僅需在當(dāng)前窗口等候,用戶甚至可以到其他窗口做別的事情,當(dāng)服務(wù)器 需要發(fā)送新數(shù)據(jù)時(shí),它只是源(ABC輸入法沒(méi)那個(gè)字*&^$#)傳輸管道發(fā)送數(shù)據(jù)塊,客戶端相應(yīng)的窗口進(jìn)行自我更新。

    在服務(wù) 器推送技術(shù)中,“multipart/x-mixed-replace”類型的報(bào)文由唯一的邊界線組成,這些邊界線分割每個(gè)數(shù)據(jù)塊。每個(gè)數(shù)據(jù)塊都有自己的 頭標(biāo),因而能夠指定對(duì)象相關(guān)的內(nèi)容類型和其他信息。由于“multipart/x-mixed-replace”的特性是每一新數(shù)據(jù)塊取代前一數(shù)據(jù)對(duì)象, 因而瀏覽器中總是顯示最新的數(shù)據(jù)對(duì)象。
    “multipart/x-mixed-replace”報(bào)文沒(méi)有結(jié)尾。也就是說(shuō),服務(wù)器可以永遠(yuǎn)保持 連接,并發(fā)送所需的數(shù)據(jù)。如果用戶不再在瀏覽器窗口中顯示數(shù)據(jù)流,或者瀏覽器到服務(wù)器間的連接中間(例如用戶按“STOP”按鈕),服務(wù)器的推送才會(huì)中 斷。這是人們使用服務(wù)器推送的典型方式。

    當(dāng)瀏覽器發(fā)現(xiàn)“Content-type”頭標(biāo)或到達(dá)頭標(biāo)結(jié)束處時(shí),瀏覽器窗口中的前一個(gè)文檔被清除,并開(kāi)始顯示下一個(gè)文檔。發(fā)現(xiàn)下一個(gè)報(bào)文邊界時(shí),就認(rèn)為當(dāng)前數(shù)據(jù)塊(文檔)已經(jīng)結(jié)束。
    總之,服務(wù)器推送的數(shù)據(jù)由一組頭標(biāo)(通常包括“Content-type”)、數(shù)據(jù)本身和分割符(報(bào)文邊界)三部分組成。瀏覽器看到分割符時(shí),它保持狀態(tài)不變,直到下一個(gè)數(shù)據(jù)塊到達(dá)。

    將以上概念進(jìn)行用編程方法實(shí)現(xiàn),就可以得到實(shí)際的服務(wù)器推送程序。例如,下面的Unix shell程序?qū)⑹篂g覽器每5秒顯示一次服務(wù)器上的進(jìn)程列表:
    #!/bin/sh
    echo "HTTP/1.1 200"
    echo "Content-type: multipart/x-mixed-replace;boundary=--ThisRandomString--"
    echo ""
    echo "--ThisRandomString--"
    while true
    do
    echo "Content-type: text/html"
    echo ""
    echo "h2Processes on this machine updated every 5 seconds/h2"
    echo "time:"
    date
    echo "p"
    echo "plaintext"
    ps -el
    echo "--ThisRandomString--"
    sleep 5
    done
    注意到,邊界設(shè)置在sleep語(yǔ)句之前發(fā)送,這能夠確保瀏覽器清除其緩沖區(qū),并顯示所接收到的最新數(shù)據(jù)。
    NCSA HTTPD用戶在內(nèi)容類型中不能使用空格,包括邊界參數(shù)。NCSA HTTPD只能將不帶空格字符的字符串作為內(nèi)容類型。如果在內(nèi)容類型行中存在空格(冒號(hào)后面的空格除外),空格后的任何文本都會(huì)被刪除。
    下面的示例是正確的:
    Content-type: multipart/x-mixed-replace;boundary=ThisRandomString
    而下例則不能正常工作,因?yàn)樗谥虚g有空格:
    Content-type: multipart/x-mixed-replace; boundary=ThisRandomString
    服務(wù)器推送的另一個(gè)優(yōu)點(diǎn)是它可以針對(duì)單個(gè)內(nèi)聯(lián)圖象進(jìn)行。包括圖象的文檔可以由服務(wù)器定時(shí)或定周期進(jìn)行更新。而實(shí)現(xiàn)這一點(diǎn)非常簡(jiǎn)單:只需使IMG元素的SRC屬性指向推送一系列圖象的URL即可。

    如果服務(wù)器推送用于單個(gè)內(nèi)聯(lián)圖象,文檔中的圖象就會(huì)一次次被新推送來(lái)的圖象所代替,而文檔本身不需變化(假設(shè)文檔沒(méi)有進(jìn)行服務(wù)器推送)。這樣,WEB頁(yè)面中有限的動(dòng)畫(huà)就可以為靜態(tài)畫(huà)面所代替。

    客戶端拖曳

    客戶端拖曳的一個(gè)簡(jiǎn)單用法是使文檔按固定周期自動(dòng)重載。例如,考慮下面的HTML文檔:
    <META HTTP-EQUIV="Refresh" CONTENT=1>
    <TITLE>Document ONE</TITLE>
    <H1>This is Document ONE!</H1>
    Here's some text.<P>
    如果將它載入支持動(dòng)態(tài)文檔的瀏覽器(Netscape 1.1以上,Internet Explorer和Mosaic也支持客戶端拖曳),它將每隔一秒將自己重載一次。
    由于META元素實(shí)際是在HTML文檔中模擬HTTP響應(yīng)頭標(biāo),所以它能夠告知瀏覽器將自身信息當(dāng)作HTTP響應(yīng)使用。上例中的META標(biāo)記相當(dāng)于:
    Refresh:1
    這樣,實(shí)際上就是HTTP頭標(biāo)告知瀏覽器每一秒更新一次文檔。如果需要延時(shí)是12秒,那么就是這樣的指令:
    <META HTTP-RQUIV="Refresh" CONTENT=12>
    那么它等效于:
    Refresh:12

    關(guān)于客戶端的拖曳我也懶的繼續(xù)寫(xiě)下去,關(guān)于怎么使客戶端自動(dòng)申請(qǐng)其他URL的數(shù)據(jù)話,請(qǐng)使用如下:
    <META HTTP-EQUIV="Refresh" CONTENT="12;URL=http://icools.yeah.net/">
    注意的是,此處的URL不能使用相對(duì)路徑,必須全部指定。

    其中時(shí)間間隔可以設(shè)置為0,這樣瀏覽器在當(dāng)前文檔顯示完畢后,以最快的速度載入新的數(shù)據(jù)!


    轉(zhuǎn)載:
    http://blog.csdn.net/21aspnet/archive/2008/11/20/3341805.aspx

    當(dāng)下,把心放下 放下如果是可能的,那一定是在當(dāng)下,
    不在過(guò)去,也不在未來(lái)。
    當(dāng)下放下。唯有活在當(dāng)下,你的問(wèn)題才能放下。

    主站蜘蛛池模板: 亚洲国产人成在线观看| 国产亚洲精品91| 香蕉成人免费看片视频app下载| 久久精品夜色噜噜亚洲A∨| 美女羞羞喷液视频免费| 两个人看的www高清免费视频| 亚洲午夜福利精品久久| 波霸在线精品视频免费观看| 亚洲人成网77777色在线播放| 成人免费乱码大片A毛片| 亚洲AV美女一区二区三区| 99re6免费视频| 亚洲中文字幕无码av在线| 成年女人喷潮毛片免费播放| 亚洲色在线无码国产精品不卡| 免费激情视频网站| 特级毛片A级毛片100免费播放| 久久亚洲中文字幕精品一区四| a级午夜毛片免费一区二区| 1区1区3区4区产品亚洲| 美女被cao免费看在线看网站| 午夜亚洲WWW湿好爽| 青青草原亚洲视频| 国产亚洲漂亮白嫩美女在线| 亚洲中久无码不卡永久在线观看| 高清一区二区三区免费视频| 日韩亚洲产在线观看| 亚洲国产日韩在线观频| 亚洲国产综合AV在线观看| 亚洲中久无码不卡永久在线观看| 色欲色香天天天综合网站免费| 亚洲中文字幕无码久久| 亚洲一区二区三区偷拍女厕| 亚洲免费在线视频观看| 青娱乐在线免费观看视频| 久热综合在线亚洲精品| 尤物永久免费AV无码网站| 四虎成人精品永久免费AV| 久久亚洲精品11p| 亚洲视频一区二区在线观看| 免费一级毛片不卡不收费|