【问题标题】:What is Comet for Real time systems?什么是实时系统的彗星?
【发布时间】:2016-06-28 09:03:19
【问题描述】:

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

【问题讨论】:

    标签: comet cometd


    【解决方案1】:

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

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

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

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

    “长轮询”就是这样一种技术,可能是最流行和最可靠的。 其他此类技术包括“隐藏 iframe”、“脚本注入”(又名 JSONP)和“无限响应”(又名“流式传输”)技术(例如使用 HTTP/1.1 的 Transfer-Encoding: chunked 机制)。

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

    BOSH(由XEP-0124 定义)是长轮询技术的一种变体,特别是在 XMPP 中使用,因此它也是一种“彗星”技术。

    Bayeux 是一种与传输无关的协议,它在 HTTP 或 WebSocket 等传输协议之上定义 channelmessage 语义。 CometD 项目在 HTTP 和 WebSocket 之上使用 Bayeux 向应用程序提供点对点、发布订阅和远程调用 functionalities。其他项目在 HTTP 或 WebSocket(或两者)之上使用 Bayeux 协议。

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

    这真的取决于你对“架构”这个词的意思。

    我会说“彗星”是一组使用 HTTP 实现低延迟事件的技术。

    长轮询、HTTP 分块流式传输、SSE、BOSH 是其中的一些“彗星”技术。

    Bayeux 是一种与传输无关的协议,它基于用于消息传递的 JSON。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-18
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多