推播技術
| 本條目的內容翻譯自英語維基百科,需要校對翻譯。 |
推送技術,又名反向AJAX,指的是一種基於Internet,將由中心或發布者發出消息傳輸給用戶的技術。與之相對的是拉取,這種情況下請求是由用戶或客戶端主動發起的。
常見用途[編輯]
推送技術常常用於消息的訂閱。客戶端「訂閱」服務器提供的多種信息「頻道」;一旦有新的信息可用,服務器將此消息推送到客戶端上。
其中的典型例子是即時通信服務。消息服務將來自用戶的消息或文件儘可能快地推送到接收者一端。無論是非中心式結構(如WASTE)還是中心式結構(如IRC或XMPP),他們都允許發送者而不是接收者主動地推送信息。
電子郵件同樣可以是一個推送系統:SMTP協議可以成為一種推送技術。然而,從郵件服務器到接收者桌面的最後一步通常仍然在使用傳統的拉取協議,如POP3或IMAP。現代郵件客戶端可以通過不斷重複收信來使這一步看起來實時。IMAP技術還包含了「IDLE」命令,這樣就能夠允許服務器在有新郵件到達的時候通知客戶端。
點播是另一個例子,這種服務從1990年代開始流行,能夠傳遞新聞和股市數據。網景和微軟在瀏覽器大戰時期都整合了這種功能,但是在2000年代,其逐漸被RSS等技術取代並淡出。
其他推送系統的用途還包括股票數據發布、在線聊天、網路拍賣、在線遊戲、體育結果發布、終端監視,以及高級網絡監控等。
典型實現[編輯]
HTTP服務器推送[編輯]
HTTP服務器推送(又稱HTTP流)是一種由Web服務器向瀏覽器傳輸數據的機制。這種機制可以通過多種方法實現。
一般來講,Web服務器不在向客戶端傳輸數據後中斷,而是保持這個連接。這樣一旦新的數據到達或事件觸發,服務器可以儘快地將數據(通過這個/這些連接)傳送到一個或一批客戶端。通常Web服務器通過CGI提供這種功能(如Apache上不處理請求頭的腳本)。
另一種機制是由網景於1995年引入,基於一種特定的名叫「multipart/x-mixed-replace」的MIME類型。[1]當服務器推送一些新數據時,瀏覽器將解釋為文檔變化。時至今日,此協議仍然被Firefox,Opera和Safari支持,卻無法被Internet Explorer支持。[2]其可以應用於HTML文檔,也可以用於網絡攝像頭應用中的圖片流。
網頁超文本技術工作小組的Web應用1.0版推薦標準[3]包含一種向客戶端推送內容的機制。[4][5]2006年9月1日,Opera瀏覽器引入了一種名為「服務器發送事件」的實驗性系統,這在今天已經成為HTML5標準的一部分。[6]與之相關的另一部分HTML5標準是WebSocket API,這將允許客戶端和服務器通過一個全雙工TCP連接通信。
Pushlet[編輯]
在這種技術中,服務器利用了持續HTTP連接的優勢,將返回持久地保持為「打開」狀態(比如,服務器一直沒有中斷請求),有效地使瀏覽器在加載完初始化內容後認為頁面一直在「加載中」。之後,服務器定時地發送Javascript片段來更新頁面內容,實現「推送」。使用這類技術時,客戶端不需要使用Java applet或類似的插件來保持服務器連接;客戶端將自動地注意到來自服務器的新事件。[7][8]然而,這種方法有一個嚴重缺陷,服務器無法控制瀏覽器的超時時間;一旦超時,客戶端必須進行一次重新載入。
長連接[編輯]
在頁面里嵌入一個隱蔵iframe,將這個隱蔵iframe的src屬性設為對一個長連接的請求或是採用xhr請求,服務器端就能源源不斷地往客戶端輸入數據。優點:消息即時到達,不發無用請求;管理起來也相對方便。缺點:服務器維護一個長連接會增加開銷。實例:Gmail聊天
長輪詢[編輯]
長輪詢本身不是一種真正的推送技術,而只是傳統輪詢技術的一個變種。然而,其能夠在真正推送技術無法實現時模擬推送機制。
在長輪詢機制中,客戶端像傳統輪詢一樣從服務器請求數據。然而,如果服務器沒有可以立即返回給客戶端的數據,則不會立刻返回一個空結果,而是保持這個請求等待數據到來(或者恰當的超時),之後將數據作為結果返回給客戶端。
例如,BOSH是一個常見的、長久的、在TCP困難或無法實現的情況下(如在使用瀏覽器的情況下[9])使用長輪詢模擬TCP的技術。這也是一種XMPP中隱含的技術,蘋果公司將其用於iCloud推送支持。
Flash XMLSocket[編輯]
這種技術被Cbox等一些聊天應用使用。這種情況下,通過一個Javascript控制的一像素的Flash影片實現XMLSocket,客戶端可以建立一條TCP連接實現與中繼服務器的單向通信。中繼服務器不會從Socket讀取任何數據,而僅僅是立刻向客戶端發送一個唯一標識符。接下來,客戶端通過一個HTTP請求將此標識符發送給Web服務器。這樣,Web應用程序就能夠通過中繼服務器向客戶推送消息。中繼服務器不需要主動打開TCP連接,這樣他可以處理數萬連接。在這種模式下,主要瓶頸在於服務器操作系統的TCP協議棧。
參見[編輯]
參考[編輯]
- ^ CGI Programming on the World Wide Web O'Reilly book explaining how to use Netscape server-push
- ^ Server-Push Documents(HTML & XHTML: The Definitive Guide)O'Reilly book explaining server-push
- ^ Web Applications 1.0 specification.
- ^ Event Streaming to Web Browsers. 2006-09-01 [2007-03-23].
- ^ Opera takes the lead with AJAX support among browsers: More efficient streaming. 2006-09-01 [2007-03-23].
- ^ Server-Sent Events
- ^ Pushlets introduction
- ^ JavaWorld article about pushlets
- ^ XEP-0124: Bidirectional-streams Over Synchronous HTTP (BOSH). [2012-06-26].