7

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

像 Facebook 和谷歌这样的主要网络公司都为此目的使用 Comet,如果为主要浏览器启用 tcp 连接,这似乎是一个等待消失的丑陋黑客。

4

4 回答 4

5

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

是的,它可以通过 Silverlight、Flex、Flash 和 Java 小程序实现。

像 Facebook 和谷歌这样的主要网络公司都为此目的使用 Comet,如果为主要浏览器启用 tcp 连接,这似乎是一个等待消失的丑陋黑客。

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

于 2009-09-25T22:20:09.790 回答
2

如果有其他方法,你认为 Facebook 和 Google 为什么会这样做?

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

已经有一些关于将服务器发送的事件Web 套接字添加到 HTML5 的讨论,但这是非常初步的,可能不会使其成为标准。

于 2009-05-03T00:28:29.170 回答
2

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

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

于 2009-05-03T00:31:10.987 回答
2

Comet 可以实现为一个长轮询 ajax 调用,所以它成为一个语义问题。 例如,这里是一个 jquery 插件,它在 jQuery 的 ajax 调用上使用 Bayeux 协议实现 Comet。

于 2009-05-03T00:43:22.783 回答