服务器推送:comet vs ape?

8

我稍微了解了一下comet和APE。

哪一个更好呢?我希望用户可以看到其他用户更新的内容,就像Google Wave一样。

在comet中,有两个版本:iframe和传统ajax。它们有什么区别,哪一个更好?我不太理解。

谢谢。

8个回答

16

Comet是一组用于开发实时应用的技术。它有两个主要实现:流媒体和长轮询。

在常规的HTTP请求中,用户向服务器发送请求、接收数据(HTML、脚本等)并关闭连接,故事就结束了。 在流媒体中,客户端或服务器永远不会关闭连接,两方共享一个单独的连接。

在长轮询中,你有一个重复的连接等待响应。基本上,浏览器向服务器发送请求并等待直到服务器响应(服务器只在有新数据要传递给客户端时才响应),然后连接被关闭,浏览器重新打开一个连接,并且这个循环不断重复 :) 这两种方法中,长轮询是最常用的。

在浏览器中使用Comet通常需要一个针对大量长期HTTP连接进行优化的Web服务器,以及一个JavaScript客户端与Comet服务器通信。因此,Ape是可安装的服务器,而Comet是其基础范例。 这里有一个Comet实现列表:http://cometdaily.com/maturity.html


7

3
Comet是一种技术,APE是其中的许多实现之一。那么iframe和传统的ajax有什么区别呢?在任何可以使用HTML5 WebSockets的地方都要使用它。
现在,所有现代浏览器都使用XMLHttpRequest进行ajax请求(客户端到服务器,返回某些数据)。但有时JS应用程序通过iframes发送文件也很好。并不是所有的XMLHttpRequests实现都支持多部分数据传输(据我所知,Chrome和现代FF)。
WebSockets是专门为类似Comet的技术创建的(当客户端仅打开一个连接并且Web服务器通过打开的流或WebSocket向客户端推送一些数据时),因此如果可以,请使用它。
顺便说一句,我建议您为您的Comet流(或通道)使用独立的Web服务器。
附言:我喜欢APE。

2
Etherpad.com是一种超快速实时文档共享工具,使用彗星技术来提供其他编辑者协作的几乎实时屏幕更新。制造etherpad的公司(AppJet)刚被Google收购,以开发Google Wave。请查看关于Etherpad的常见问题http://etherpad.com/ep/about/faq和他们的实现http://code.google.com/p/etherpad/(开源Etherpad)。我支持使用彗星技术,因为Etherpad的商业成功和Google Wave使用彗星技术的实现。

但是您还没有回答问题。Comet iframe和传统的ajax在他们的网站上有什么区别? - ajsie
我并没有尝试回答你提出的问题,我知道这在 Stack Overflow 上很常见,我只是想让你知道 Google 和像 etherpad 这样聪明的人选择使用 comet 技术,所以其中一定有些优点。 - Stewart Robinson

2

看看WebSockets。Chrome和新版Firefox已经支持它了。在其他浏览器上,当你真正需要时,你可以退而使用comet。


1
APE不就是Comet的一种实现方式吗?这就是产品页面上所说的。

那么Comet到底是什么?是APE和Etherpad的技术吗?Comet = 反向ajax? - ajsie

1
APE是Comet的一种实现。它提供了一个非阻塞IO服务器和JS客户端库,用于实现发布/订阅消息系统。
APE服务器本身可以使用服务器端JavaScript进行编程。像PHP/Ruby/其他语言的服务器端代码可以通过向APE服务器发出“命令”来广播数据。
连接的客户端通过监听“Raws”来接收从APE服务器发送到客户端的事件和数据。

1

我认为你想比较基于IFrame的技术和基于Ajax(XMLHttp)的技术。

我认为主要的区别在于,在浏览器接收到整个响应之前,您无法读取AJAX请求的响应内容。这意味着,为了模拟流式传输,您将不得不执行以下操作:

  1. 向服务器发出请求
  2. 在获得响应后读取响应并发出另一个请求

如果没有任何内容返回,服务器可以保持请求。

另一方面,基于IFrame的解决方案可以在单个请求的响应中返回多个


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接