32

看起来 HTML 5 中的 Websockets 将成为服务器推送的新标准。

这是否意味着名为 Comet 的服务器推送黑客将被淘汰?

当 Websockets 很快(1-2 年)将在所有主要浏览器中可用时,我是否有理由学习如何实现 Comet?

然后我可以使用BeaconpushPusher代替,对吗?

4

6 回答 6

17

这个谜题有 2 个部分:

问:“彗星”的客户端部分是否必要?

答:是的。即使在接下来的 2 年内,您也不会在“主要”浏览器中看到对 WebSockets 的完全支持。例如 IE8 不支持它,当前版本的 FireFox 也不支持。鉴于 IE6 是在 2001 年发布的,并且它今天仍然存在,我认为 WebSockets 不会很快完全取代彗星。

问:“彗星”的服务器端部分是否必要?

答:是的。Comet 服务器旨在处理长寿命的 HTTP 连接,而“典型的”Web 服务器则不能。即使客户端支持 WebSockets,仍然需要设计服务器端来处理负载。

此外,正如“gustavogb”所提到的,至少现在很多 HTTP 代理都没有正确支持 WebSocket,所以在所有这些都得到更新之前,我们仍然需要某种回退机制。

简而言之:今天存在的彗星不会很快消失。

作为补充说明:目前在 Chrome 和 Safari 中实现的 WebSockets 版本是两个不同的草案,“当前”草案的工作仍在非常繁重的开发中,所以我什至不相信这样说是现实的WebSockets 支持目前可用。作为好奇心或学习,当然,但不是真正的规范,至少现在还不是。

[更新,2/23/11]

当前发布的 Safari 版本有一个损坏的实现(它不会发送正确的标头),Firefox 4 刚刚弃用了 WebSockets,因此它不会发布,而且IE9 看起来也不太好。看起来 Chrome 是唯一一个具有工作的、启用版本的草案规范的版本,所以 WebSockets 还有很长的路要走。

于 2010-08-11T21:39:38.853 回答
12

这是否意味着名为 Comet 的服务器推送黑客将被淘汰?

WebSockets能够替代 Comet、AJAX、Long Polling 和所有 hack,以解决当 Web 浏览器无法打开简单套接字与服务器进行双向通信时的问题。

当 WebSockets 很快将在所有主要浏览器中可用时,我是否有理由学习如何实现 comet?

这取决于“很快”对您意味着什么。例如,没有任何版本的 Internet Explorer(IE 9 之前)支持 WebSockets API。


更新:

这并不是一个详尽的答案。查看其他答案,尤其是@jvenema 的答案,以进一步了解该主题。

于 2010-08-09T00:00:43.993 回答
3

从中期来看,websockets 不会取代 comet 解决方案,这不仅是因为缺乏浏览器支持,还因为HTTP 代理。在大多数 HTTP 代理更新以支持 websockets 连接之前,Web 开发人员将不得不实施基于彗星技术的替代解决方案,以便在使用这种代理“保护”的网络中工作。

在短/中 websockets 将只是在可用时使用的优​​化,但是如果您需要让您的网站可以访问很多人,您仍然需要实现长轮询(彗星)以依赖于 websockets 不可用时网络/浏览器不受您控制的客户。

希望这将被 javascript 框架抽象出来,并对 Web 开发人员透明。

于 2010-08-09T00:11:29.927 回答
3

考虑在没有浏览器支持的情况下使用回退到 Comet 的 Web 套接字库/框架。

查看 Orbited 和 Hookbox。

于 2010-08-09T14:02:00.030 回答
2

是的,因为“很快”是一个很滑的词。许多网上商店仍然必须支持 IE6。

不,因为最近出现了大量的彗星框架和服务器,这很快就会让你在很大程度上没有必要在地下室弄脏你的手。

是的,因为“很快”是一个很滑的词……

于 2010-08-08T23:54:50.513 回答
0

[工作组] 负责 websockets、双向或服务器发起的 HTTP (hybi) 工作组的章程:

工作组说明

HTTP 最常被用作请求/响应协议,导致客户端轮询新数据,或者用户点击浏览器中的刷新按钮。最近的 Web 应用程序正在寻找与 Web 服务器实时通信的方法,一旦数据可用,就将数据从服务器端推送到客户端。但是,目前这些应用程序只能使用多种 HTTP 机制(例如长轮询请求)与 Web 服务器进行双向通信。

超文本双向 (HyBi) 工作组将寻求一种方法的标准化,以维护 HTTP 客户端、服务器和中间实体之间的双向通信,与当前使用挂起请求相比,这将提供更高的效率。

HTTP 仍然可以发挥作用;这是一个灵活的面向消息的系统。开发 websockets 是为了提供双向性并完全避免长轮询问题。[它做得很好]。但它比http简单。并且有很多关于 http 有用的东西。无论是彗星还是其他推送技术,丰富http的双向通信肯定会继续取得进展。我自己的卑微尝试是 [ http://github.com/rektide/pipe-layer ]。

于 2010-09-23T23:41:51.563 回答