2009-05-03 54 views
7

是否有可能让Web服务器在没有Comet的情况下向Web浏览器发送消息?反向Ajax无彗星?

每一个主要的网络公司如Facebook和谷歌使用彗星为了这个目的,它只是似乎是一个丑陋的黑客等待消失,如果TCP连接被各大浏览器中启用。

回答

5

是否有可能让web服务器 发送消息到web浏览器 没有彗星?

是的,它可能通过Silverlight,Flex,Flash和Java Applet。

每一个主要的网络公司,如Facebook 和谷歌使用彗星为了这个目的 ,它只是似乎是一个丑陋的黑客 等待消失,如果TCP连接 了重大 浏览器中启用。

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

+1

请参阅:http://stackoverflow.com/questions/1227266/how-do-i-open-a-connection-back-to-the-server-using-flex – DLauer 2009-09-25 22:25:29

2

为什么你认为Facebook和谷歌会怎么做,如果有另一种方式?

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

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

2

为“彗星”是什么人工术语,它使用现有的HTTP协议来模拟数据推我担心有什么可以做。

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

2

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