什么是 Comet for Real time 系统?

What is Comet for Real time systems?

Comet 是一种架构风格吗?Websockets/HTTP Streaming/SSE/BOSH/Bayeux 是这种架构风格的不同实现吗?

"Comet" 这个词是作为 "Ajax" 这个词的笑话而诞生的。

AJAX(如异步 JavaScript 和 XML)是一种执行 HTTP 请求和处理来自浏览器 JavaScript 引擎的 HTTP 响应的技术。 当时"Ajax"也是清洁用品

当开发人员使用 AJAX 开始探索向浏览器发送服务器端事件的低延迟技术时,术语 "Comet" was coined 因为当时 "Comet" 是另一种据称比 "Ajax" 清洁产品更好的清洁产品,并且 "Comet" 技术优于 "Ajax" 技术。

"Comet" 是一系列用于 Web 的 HTTP 技术,用于以非常小的延迟(远小于一秒)通知客户端(通常是浏览器)服务器端事件。

"Long Polling" 就是这样一种技术,可能是最流行和最可靠的。 其他此类技术包括 "hidden iframe"、"script injection"(又名 JSONP)和 "infinite response"(又名 "streaming")技术(例如使用 HTTP/1。 1 的 Transfer-Encoding: chunked 机制)。

现在,Server Sent Events(SSE,又名 EventSource)是一种已经标准化的流媒体技术,尽管最近没有太大的发展。 SSE 没有使用 Transfer-Encoding: chunked 机制,而是使用浏览器实现的 Content-Type: text/event-stream 以及 HTTP 传输机制之上的简单协议。这意味着从服务器传来的内容有一种格式——由这个简单的协议定义——需要被浏览器解析以转换成传递给 JavaScript 引擎的事件,并且应用程序有一个 API 能够收听这些 JavaScript 事件。

BOSH(由 XEP-0124 定义)是长轮询技术的变体,特别用于 XMPP,因此它也是一种 "Comet" 技术。

Bayeux is a transport-agnostic protocol that define channel and message semantic on top of a transport protocol such as HTTP or WebSocket. The CometD project uses Bayeux on top of HTTP and WebSocket to provide peer-to-peer, publish-subscribe and remote-call functionalities 申请。其他项目在 HTTP 或 WebSocket(或两者)之上使用 Bayeux 协议。

最后,WebSocket 是一种具有内置双向功能的传输协议,这是 HTTP 所没有的。 但是,它没有定义它传输的有效负载的语义,也没有描述它的元数据,因此它通常用作其他协议(如 Bayeux)的传输协议。 WebSocket 不是 "Comet" 技术,因为它不基于 HTTP。

这真的取决于你对 "Architecture" 这个词的意思。

我会说 "Comet" 是一组使用 HTTP 实现低延迟事件的技术。

长轮询、HTTP 分块流、SSE、BOSH 是其中的一些 "Comet" 技术。

Bayeux 是一种基于 JSON 的传输不可知协议,用于消息传递。

WebSocket 是一种双向传输协议,可与其他通常与传输无关的协议(如 Bayeux)结合使用。它在浏览器中的支持使其成为 "Comet" 技术的替代品。