2016-06-28 67 views

回答

2

術語"Comet"是作爲對「Ajax」這個詞的笑話而誕生的。

AJAX(asynchronous JavaScript and XML)是一種執行HTTP請求並處理來自瀏覽器JavaScript引擎的HTTP響應的技術。 當時,「Ajax」也是一種清潔產品。

當開發人員使用AJAX開始探索服務器端事件瀏覽器的低延遲傳輸技術時,術語「Comet」was coined因爲當時的「Comet」是另一種清潔產品,它比「 Ajax「清潔產品和」Comet「技術比」Ajax「技術更好。

「Comet」是一系列用於Web的HTTP技術,用於通過客戶端(通常是瀏覽器)以非常短的等待時間(遠小於一秒)通知服務器端事件。

「長輪詢」是一種這樣的技術,可能是最流行和可靠的。 其他此類技術包括「隱藏的iframe」,「腳本注入」(又名JSONP)和「無限響應」(又名「streaming」)技術(例如使用HTTP/1.1的Transfer-Encoding: chunked機制)。

現在,服務器發送的事件(SSE,又名EventSource)是一種已經標準化的流媒體技術,儘管最近還沒有看到太多的發展。 SSE使用瀏覽器實現的Content-Type: text/event-stream而不是使用Transfer-Encoding: chunked機制,而使用HTTP傳輸機制之上的簡單協議。這意味着來自服務器的內容具有一種格式 - 由此簡單協議定義 - 需要由瀏覽器進行解析以將其轉換爲傳遞給JavaScript引擎的事件,並且應用程序具有API以便能夠監聽到這些JavaScript事件。

BOSH(由XEP-0124定義)是長輪詢技術的變體,特別是在XMPP中使用的,因此它也是一個「彗星」技術。

Bayeux是傳輸無關的協議,該協議定義通道消息上的傳輸協議,例如HTTP或網頁套接字的頂部語義。 CometD項目在HTTP和WebSocket上使用Bayeux爲應用程序提供點對點,發佈 - 訂閱和遠程調用functionalities。其他項目在HTTP或WebSocket(或兩者)之上使用Bayeux協議。

最後,WebSocket是一種內置雙向功能的傳輸協議,它不具備HTTP的功能。然而,它沒有定義它傳輸的有效負載的語義,也沒有描述它的元數據,所以它通常用作其他協議(如Bayeux)的傳輸協議。 WebSocket不是「Comet」技術,因爲它不基於HTTP。

這實際上取決於你對「建築」這個詞的含義。

我會說「Comet」是一組使用HTTP實現低延遲事件的技術。

長輪詢,HTTP分塊流式傳輸,SSE,BOSH是這些「彗星」技術中的一部分。

Bayeux是基於JSON的傳輸協議協議,用於消息傳遞。

WebSocket是一種雙向傳輸協議,與其他協議(通常是傳輸協議,如Bayeux)協同使用。它在瀏覽器中的支持使它成爲「Comet」技術的替代品。