看起来HTML 5中的Websockets将成为服务器推送的新标准。
这是否意味着名为Comet的服务器推送将被淘汰?
当所有主流浏览器中的Websockets很快(1 - 2年)可用时,我是否有理由学习如何实现彗星?
然后我可以使用Beaconpush或Pusher代替直到那时呢?
答案 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)
当Web浏览器无法打开与服务器进行双向通信的简单套接字时,这是否意味着名为Comet的服务器推送将被淘汰?
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]。