Ajax、Comet、HTML 5 Web Sockets

來源:互聯網
上載者:User
 

Ajax為HTTP通訊模型提供了很好的解決方案,它在用戶端非同步輪詢伺服器端事件。伺服器事件依次排列在待處理隊列中,根據輪詢時間隙依次傳送到
瀏覽器,這樣類比伺服器發起的通訊,在輪詢時間隙間進行即時訊息傳遞。因此,僅僅依靠Ajax,我們永遠都不可能實現真正的即時通訊。

 

Comet引入的最佳化針對的是HTTP通訊初始之時,它在HTTP基礎上採用“push”通訊風格。Comet提供的幾項技術能夠在沒有用戶端發送
請求的前提下讓伺服器主動將資訊發送到瀏覽器。如果再增加一個額外的HTTP串連的話,Comet甚至可以在兩個HTTP串連上實現雙向通訊。但
Comet的絆腳石在於各個瀏覽器供應商對XHR、iFrames——這兩種實現Comet所需的資料區塊的支援程度不盡相同,沒有統一的實現標準。另外,
無論是從網路還是開發角度來看,Comet管理兩個串連的開銷都很大。這些開銷帶來的直接影響就是Comet應用中的傳輸延時,限制了它們所提供的即時通
信的精確性。

---->

用Comet開發有很多挑戰。實現你自己的解決方案不是不可能,但這需要開發JavaScript類庫,借用frame和XHR
Streaming等很多技術來維護持續串連。這時候,問題就在於不同的瀏覽器對這些技術有不同的實現,更糟的是,它們往往都依賴伺服器端程式碼推送
JavaScript程式碼片段,不僅增加了整個實現的複雜程度,還引入了移植性的問題。 

還好,現在有幾個架構提供了這些傳輸的抽象,簡化了Comet開發。其中最著名的就是SitePen的Cometd,其實現完全參
考Bayuex規範。Bayuex規範定義了Comet的publish-subscribe模型。Jetty近期版本也包含了基於Java的伺服器端的
Bayeux實現。 

Bayuex和Cometd著實簡化了Comet,然而它的API和wire協議還是有很多爭議。Comet Daily上有一個 “Coliding Comet: Battle of the Bayuex”系列就專門深入討論關於Bayuex的各種問題。

 

HTML 5 WebSocket代表的是Comet和Ajax推進HTTP通訊新一輪的嘗試。HTML 5
WebSocket規範中定義,在瀏覽器和伺服器之間採用單socket全雙工系統(或者叫雙向)傳輸來push和pull資訊。這不但可以避免Comet中
存在的串連和可移植問題,還能夠提供比Ajax輪詢更高效的解決方案。目前,HTML 5 WebSocket是推動web全雙工系統即時通訊的主要機制。

---->

儘管Comet和Ajax都可以實現提供案頭應用功能的終端使用者體驗,而且傳輸延時也可以縮短到使用者無法感知的程度,但仍然只有Web
Sockets才能真正為瀏覽器提供精確、高效的流事件,保證傳輸延時可以微乎其微,直至忽略不計。這是目前為止通過web發送即時資訊最出色的解決方
案。它不僅通過單個TCP/IP串連提供完整的非同步雙工道流通訊,而且新的HTTP頭的應用也非常有利,更重要的是它能夠支援瀏覽器和源服務的訊息採用同
樣的格式。 

多數Comet實現都依賴Bayeux協議。該協議要求源服務發出的訊息必須轉換成Bayeux協議支援的格式,這一併不必要的轉
換反而使得整個系統更加複雜,開發員不得不在伺服器端處理一種訊息格式(比如JMS、IMAP、XMPP等),在用戶端又要處理另一種訊息格式(比如
Bayeux、JSON)。而且實現將源協議轉換到Bayeux的代碼硬是要在發送訊息之前對訊息本身進行解析和處理,這又給系統增添了不必要的效能負
載。採用Web Sockets的話,就不會有因為轉碼而增加系統的複雜性,也就不用為這方面的效能擔憂。 

WebSockets經常遇到的一個問題是它是否可行。目前來看,瀏覽器本身沒法直接支援這項技術。但再過幾個月就肯定可以了,像
WebKit、Firefox和Opera這樣的瀏覽器從來就對HTML
5的特性——比如Canvas、postMessage、離線儲存和伺服器端發送資訊(SSE)等反應迅速,及時添加相應的支援。 

WebSockets還需要服務端一定程度的支援,因為現存HTTP串連更新到新串連需要HTTP的一個起始“握手”。 Kaazing
Gateway開源項目實現了第一個支援這一動作的伺服器,並且擁有能夠支援成千上萬持續串連所需的擴充性。 Kaazing
Gateway的供應商Kaazing還提供了一個可以讓當前所有web瀏覽器都支援WebSockets的JavaScript類庫。所以,目前對
WebSocket的支援也可說是準備就緒了。

為了支援HTML 5 WebSockets,Kaazing發布了Kaazing Gateway 8.09_2 Atlantis,這是一個開源HTML 5 WebSocket伺服器,可以在Mozilla公用許可的衍生許可—— OSI approved Common Public Attribution License (CPAL)下使用:

Kaazing Gateway提供JavaScript類庫來類比HTML 5 WebSocket,開發員現在就可以開始運用WebSockets,結合WebSocket介面建立的應用在當前甚或是未來的瀏覽器上都可以部署。 

Kaazing Gateway背後的超高效能伺服器的單個節點能夠支援成千上萬的並發串連。多執行個體通過傳統的HTTPServer Load Balancer或者DNS
round robin演算法叢集分類,因此能夠支援無數個持續客戶串連。除了大量的串連之外,Kaazing
Gateway的高效能和分級事件驅動構架(SEDA)還推動它本身能夠處理高資料輸送量。 

Kaazing Gateway的Atlantis發布還為流行的Message Service(諸如Apache
ActiveMQ、RabbittMQ)和XMPP服務(諸如OpenFire、Jabberd和其它一些流行的聊天伺服器)打包了JavaScript
用戶端。這樣,建立那些基於web的聊天應用或是stock matrixes、網上交易平台、線上遊戲等訊息發送應用就更為簡單了。

計劃中的Kaazing Gateway 8.12發布把目標瞄準了更多的HTML 5特性,例如伺服器端發送事件(Server-sent Event)、更先進的安全服務,以及對XMPP(Jabber)、STOMP (比如ActiveMQ、RabbitMQ或OpenMQ)等的擴充支援:

它所提供的類庫能夠讓目前的瀏覽器都支援HTML 5伺服器發送事件,引進了HTML 5
postMessage的支援,無疑方便了跨文檔的訊息傳遞。Kaazing的HTML 5類庫還包括對HTML
5離線儲存的支援,提供簡易、基於DOM的儲存解決方案。Kaazing
Gateway及其客戶類庫現在還為跨站請求支援W3C存取控制,這一機制能夠讓用戶端啟動跨站請求,比較多的提法是跨站
XmlHttpRequests。 

除了對HTML 5的擴充支援以外,Kaazing Gateway
8.12還提供更進階的XMPP特性,比如群聊。這一發布版本還引進了STOMP-JMS適配器,因此,結合Kaazing
Gateway還能適配任何現存的JavaMessage Service(JMS)(例如JBoss Messaging、Tibco
EMS、OpenMQ、SwiftMQ、WebSphere MQ等等)。

 

英文原文:HTML 5 Web Sockets vs. Comet and Ajax

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.