HTML 5 Websockets将取代Comet?

时间:2010-08-08 23:53:10

标签: html comet websocket server-push

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

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

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

然后我可以使用BeaconpushPusher代替直到那时呢?

6 个答案:

答案 0 :(得分:17)

这个谜题有2件:

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

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

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

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

另外,正如所提到的“gustavogb”,至少现在WebSockets在许多HTTP代理中都没有得到适当支持,所以在这些代理都得到更新之前,我们仍然需要某种回退机制。 / p>

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

作为补充说明:目前在Chrome和Safari中实现的WebSockets版本是两个不同的草稿,“当前”草案的工作仍处于非常繁重的开发阶段,所以我甚至不相信它是真实的说WebSockets支持目前正在运行。作为一种好奇心或学习,当然,但不是真正的规范,至少还没有。

[更新,2/23/11]

当前发布的Safari版本实施中断(它没有发送正确的标题),Firefox 4刚刚弃用了WebSockets,因此它不会发送,IE9 isn't looking good either。看起来Chrome是唯一一个具有工作,启用版草稿规范的人,所以WebSockets还有很长的路要走。

答案 1 :(得分:12)

  

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

当Web浏览器无法打开与服务器进行双向通信的简单套接字时,

WebSockets能够替换Comet,AJAX,Long Polling和所有黑客来解决问题。

  

当所有主流浏览器都可以使用WebSockets时,我是否有理由学习如何实现彗星?

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


更新:

这不是一个详尽的答案。查看其他答案,特别是@jvenema's,以进一步了解此主题。

答案 2 :(得分:3)

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

在短/中,websockets将只是一个可用的优化,但你仍然需要实现长轮询(彗星)依赖于websockets不可用时如果你需要使你的网站可访问许多网络/浏览器的客户都不在您的控制之下。

希望这将通过javascript框架抽象出来,并且对于Web开发人员来说是透明的。

答案 3 :(得分:3)

考虑使用在没有浏览器支持的情况下可以追溯到彗星的Web套接字库/框架。

结帐Orbited和Hookbox。

答案 4 :(得分:2)

是的,因为“很快”是一个非常滑的术语。许多网店仍然需要支持IE6。

不,因为最近出现了大量的彗星框架和服务器,很快会让你在地下室肆无忌惮地使用它。

是的,因为“很快”是一个非常滑的词......

答案 5 :(得分:0)

[working group]工作组的章程,其中包括websockets,BiDirectional或Server-Initiated HTTP(hybi):

  

工作组说明

     

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

     

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

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