小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Comet 或是 PUSH Server

 squarecome 2011-03-14

最近有機(jī)會碰到 Comet 或是 PUSH Server 這類的技術(shù),剛好一直覺得之前寫的 Comet For Ruby on Rails and Mongrel不夠有感覺,所以再寫一次。這里先得講一聲,我的認(rèn)知就是 Comet == Server PUSH ,有錯(cuò)請告知。

HTTP 統(tǒng)治網(wǎng)絡(luò)界

簡單來說,一般的 Socket Programming 都是保持一個(gè)雙向的聯(lián)機(jī),可以送可以收。但是 HTTP Design 為了以下理由,設(shè)計(jì)方向?yàn)閱蜗虻摹?/span>

  1. 提高 Server 處理效能
  2. 方便作 cache,Proxy 容易融入
  3. 方便作 Server Farm
  4. 網(wǎng)絡(luò)發(fā)展初期,實(shí)體硬件狀況不佳,很容易造成 connection lose,單向傳輸可以有效避免瞬斷

我跟你 request ,你回我 HTML ,交易完成,connection closeThis is [HTTP。]

如果以 HTTP 當(dāng)初設(shè)計(jì)的初衷「文件交換」來看,我們發(fā)現(xiàn)到他設(shè)計(jì)的非常的好,也相當(dāng)成功的在當(dāng)初糟糕的網(wǎng)絡(luò)環(huán)境下成功的生存下來。但是就是因?yàn)?/span> HTTP 設(shè)計(jì)太成功了,導(dǎo)致現(xiàn)在網(wǎng)絡(luò)業(yè)者一股腦兒將各式各樣的 App 放在 HTTP 的架構(gòu)上,想要用當(dāng)初只是為了文件交換的協(xié)議,變成一個(gè)包山包海的協(xié)議,自然產(chǎn)生很多問題。

HTTP 最大的問題在于實(shí)時(shí)性。

要解決 HTTP 的實(shí)時(shí)性的問題,有 Polling Server PUSH 這兩種方式。

Polling

我們想要做到實(shí)時(shí)傳訊,Server 端觸發(fā) Client 事件等等功能,以現(xiàn)行的 HTTP 架構(gòu)下,都得利用 Polling 的方式來做到。Polling 其實(shí)也就是現(xiàn)在的 RSS Reader 的作法,RSS Reader 會每過半個(gè)小時(shí),或是一個(gè)小時(shí)去問對方 Server 有沒有新文章。用 Polling來作實(shí)時(shí)性的功能,最大的好處在于容易寫,因?yàn)樗耆?/span> HTTP 的架構(gòu),但是最大的壞處在于不夠?qū)崟r(shí)。以 RSS Reader 來說,每過一個(gè)小時(shí)去問有沒有新文章,代表的意思就是有一整個(gè)小時(shí)的空窗期,你得每過一個(gè)小時(shí)才知道有沒有新文章。

RSS Reader 的屬性來說,采用 Polling 有很多好處

  1. 我其實(shí)不需要知道立刻知道有多少新文章,使用者對于 RSS 的實(shí)時(shí)性需求沒那么高
  2. Blog 系統(tǒng)多變,與其設(shè)定一個(gè)各 Blog 系統(tǒng)共通的 Socket 協(xié)議,不如設(shè)定一個(gè)共通的文件交換格式來的簡單

但是如果使用聊天室,即時(shí)消息傳遞,Polling 就不是一個(gè)好主意了。聊天最怕不夠?qū)崟r(shí),所以必須加快 Polling Interval,但是會帶來「提高 Server 負(fù)載」的后果。你一分鐘 Polling 一次,跟一小時(shí)一次,前者的負(fù)載是后者的 60 倍。等于你用負(fù)載換來實(shí)時(shí)性。這個(gè)在人一多的情況下會造成相當(dāng)大的負(fù)擔(dān)。

因?yàn)?/span> Polling 在某些地方不是那么的好,所以才有 Server PUSH 機(jī)制出現(xiàn)。

Server PUSH

Server PUSH 是建構(gòu)在建立一個(gè)不中斷的 Socket Connection 下面。一個(gè)作法是使用 iframe ,送出的header中要把content-type設(shè)為” multipart/x-mixed-replace”,來保持一個(gè)不間斷的 HTTP Connection。另外一個(gè)作法就是用 Flash 來跟 Server 建立一個(gè) xmlsocket。保持一個(gè)不中斷的 Connection ,代表 Server 有新訊息就可以直接傳給 Client,不用等待 Client 過來 request。

這樣可以帶來的好處就是,Server 有狀態(tài)更新才會有網(wǎng)絡(luò)傳輸,如果沒有狀態(tài)更新,就不會浪費(fèi)資源。而 Polling 是不管有沒有狀態(tài)更新,都得花上固定的網(wǎng)絡(luò)傳輸成本,當(dāng)然就會比較浪費(fèi)資源。

舉個(gè)例子,考試成績快出來了,你每個(gè)小時(shí)都從宿舍去公布欄看成績出來了沒,假設(shè)成績沒那么快出來,你自然會花上許多無意義的時(shí)間在宿舍到公布欄之間的往返上面( Polling )。但是如果老師有你的手機(jī)(不斷線的 Connection ),成績公布老師就打電話給你,告訴你的成績(Server Push)。這樣不是好多了嗎?

但是你會問,假設(shè)老師打電話給你,你在收不到訊號的地方怎么辦?假設(shè)班上人數(shù)太多,老師不是就會打電話打到手軟?

這剛好講到 Server PUSH 的壞處,第一個(gè)壞處是假設(shè) Client 網(wǎng)絡(luò)不好,connection 造成瞬斷,那么你的訊息就會消失不見了。另外一個(gè)壞處就是,持續(xù)性的 connection 很難做到 Load Sharing機(jī)制,通常大家都只會跟同一臺 PUSH Server 作連接,這臺 PUSH Server 在人一多就會產(chǎn)生大負(fù)載度的問題。這當(dāng)然有辦法解決,只是這就已經(jīng)要討論到很深的地方了。

雖然 Server PUSH 不是萬能的。不過整體來說,以傳遞「實(shí)時(shí)性需求高的訊息來說」,PUSH Server 帶來的好處絕對會比 Polling 來的好,這倒是無庸置疑的。

 

    本站是提供個(gè)人知識管理的網(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ā)表

    請遵守用戶 評論公約

    類似文章 更多