2016-06-28 78 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”技术的替代品。