没有Comet的反向Ajax?

时间:2009-05-03 00:09:11

标签: ajax tcp comet

是否可以让Web服务器在没有Comet的情况下向Web浏览器发送消息?

像Facebook和Google这样的大型网络公司都使用Comet来实现这一目的,如果为主流浏览器启用了tcp连接,它就像是一个丑陋的黑客等待消失。

4 个答案:

答案 0 :(得分:5)

  

是否可以让网络服务器   向Web浏览器发送消息   没有彗星?

是的,它可以通过Silverlight,Flex,Flash和Java Applet实现。

  

像Facebook这样的每家大型网络公司   谷歌为此目的使用Comet   它看起来像是一个丑陋的黑客   如果tcp等待消失   连接已启用专业   浏览器。

TCP连接和HTML 5 Web套接字无法解决问题。你看到很多人在他们的工作场所,大学或学校使用谷歌和Facebook,防火墙经常阻止非标准端口和非HTTP流量。因此,向Web浏览器发送消息的解决方案必须通过HTTP工作,并且通常看起来像HTTP。这就是谷歌和Facebook使用Comet的原因,并将继续这样做,否则他们将无法覆盖大部分用户。事实上,一些防火墙和反向代理将关闭长时间运行的HTTP连接,因此Ajax轮询连接通常用作后备。如果您正在寻找能够通过反向Ajax向浏览器发送消息的服务器,我可以建议类似StreamHub Reverse Ajax的内容。

答案 1 :(得分:2)

为什么你认为如果有其他方式,Facebook和谷歌会这样做?

好吧,还有其他方法。您可以在页面中嵌入Java小程序。如果Java小程序已签名,并且用户授予其权限,则可以打开长时间运行的连接,以便服务器向其发送事件。但这会让你感觉更脆弱,需要更多的用户交互,启动速度慢,并且可以在比Comet更少的平台上工作。

有一些关于向HTML5添加server-sent eventsweb sockets的讨论,但这是非常初步的,可能不会成为标准。

答案 2 :(得分:2)

因为“Comet”是任何使用现有http协议来模拟数据推送的人的术语,我担心你无能为力。

唯一的解决方案是当前协议的“增强”或一些广泛使用的可能基于插件的解决方案......你可以使用java。但这会引发其他问题,因为基本上你需要在该浏览器上提供传入连接。

答案 3 :(得分:2)

Comet可以实现为只是一个长轮询的ajax调用,所以它是一个语义问题。 Here, for example, is a jquery plugin在jQuery的ajax调用上使用Bayeux协议实现Comet。