我将从术语和历史的角度来回答这个问题。
正如我在this other answer 中所写,我们可以使用几个概括性术语之一来指代可用于将事件从 Web 服务器异步发送到 Web 客户端(反之亦然)的一组技术。 “Push Technology”这个词已经使用了十五年(关于 Push Technology 的简短历史,你可以看到这个old white paper我多年前写的——完全披露:我是 Lightstreamer 的创造者) .现在,“Web Streaming”这一术语正在 IT 分析师中获得共识(参见 Gartner,“Cool Vendors in Application and Integration Platforms,2012”,作者 Massimo Pezzini 和 Jess Thompson,2012 年 4 月 11 日)。
重要的方面是我们正在谈论基于 Web 的通信,即利用 Web 协议。有大量不基于 Web 的消息传递协议和技术(例如,大多数 MOM),我们不将它们视为推送技术(或 Web 流)的一部分。
话虽如此,您可以区分推送技术(或 Web 流)的两个子类别:
HTTP 和 WebSockets 都是 Web 协议。
如果你把基于HTTP的推送机制展开,你可以识别:
- HTTP 流媒体
- HTTP 长轮询
- HTTP 轮询
传统上,“Comet”一词(由 Alex Russell 于 2006 创造)一直指 HTTP 流式传输和 HTTP 轮询。但请考虑 HTTP 流的第一个实现可以追溯到 2000,远在 Comet 术语被创造之前(例如 Pushlets 和 Lightstreamer)。
现在,WebSockets 使 Web 流式传输的实现更加简单,尤其是对于“反向”通道(从浏览器发送到服务器的消息)。有关 HTTP 反向通道特性的更详细说明,请参阅我为 CometDaily 撰写的这篇文章的最后部分:http://cometdaily.com/2011/07/06/push-technology-comet-and-websockets-10-years-of-history-from-lightstreamers-perspective/
正如 Phil 所指出的,Comet 仍然是必要的,而且可能还会持续几年,因为不仅有旧的浏览器(包括不支持 WebSockets 的 IE9……)而且还有无数的网络中介可以做到不会说WS。例如,我们已经看到一些国家的一些移动运营商(例如意大利沃达丰)支持 WSS 但屏蔽了 WS。所以一个没有彗星“黑客”的世界还很遥远……让我补充一点,就个人而言,我从来不喜欢应用于彗星的“黑客”一词(或者,从更正确的历史角度来看,适用于 HTTP 流和 HTTP 长轮询)。在这些技术上工作了 12 年,我可以说我们已经能够对它们进行如此多的改进,以至于它们本身已经成为一项成熟的技术,完全可靠并且每天用于许多关键的生产场景(金融、航空航天、和军事,仅举几例)。
现在,让我们想象一个 WebSockets 得到普遍支持并且不再需要 Comet 的世界。你到底得到了什么?好吧,只是一个双向传输,仅此而已……在它之上,您需要构建所有内容:消息传递协议(可能基于 pub/sub),与服务器代码对话的服务器端接口,以及一套很好的优化技术和算法来管理数据流,包括带宽管理、数据合并、自动节流、增量交付等。
好消息是消息传递协议和优化机制都已经由好的 Comet 解决方案实现了。因此,扩展以前的 Comet 服务器以支持 WebSocket 是我们所有供应商都实施的自然演变。
因此,简而言之,在不远的将来,WebSockets 可能会使 Comet 传输过时,但需要吸收所有已经在传统 Comet 服务器上实现并经过良好测试的更高层。