【发布时间】:2009-05-03 00:09:10
【问题描述】:
是否可以在没有 Comet 的情况下让 Web 服务器向 Web 浏览器发送消息?
像 Facebook 和谷歌这样的主要网络公司都为此目的使用 Comet,如果为主要浏览器启用 tcp 连接,这似乎是一个等待消失的丑陋黑客。
【问题讨论】:
是否可以在没有 Comet 的情况下让 Web 服务器向 Web 浏览器发送消息?
像 Facebook 和谷歌这样的主要网络公司都为此目的使用 Comet,如果为主要浏览器启用 tcp 连接,这似乎是一个等待消失的丑陋黑客。
【问题讨论】:
是否可以让web服务器 向网络浏览器发送消息 没有彗星?
是的,可以通过 Silverlight、Flex、Flash 和 Java 小程序实现。
像 Facebook 这样的各大网络公司 谷歌为此目的使用 Comet 它看起来就像一个丑陋的黑客 如果 tcp 等待消失 为主要启用了连接 浏览器。
HTML 5 Web Sockets 等 TCP 连接不能解决问题。您会看到很多人在工作场所、大学或学校使用 Google 和 Facebook,而防火墙通常会阻止非标准端口和非 HTTP 流量。因此,将消息发送到 Web 浏览器的解决方案必须通过 HTTP 工作,并且通常看起来像 HTTP。这就是为什么谷歌和 Facebook 使用 Comet 并将继续这样做,否则他们将无法接触到大部分用户。事实上,一些防火墙和反向代理会关闭长时间运行的 HTTP 连接,因此 Ajax 轮询连接通常用作后备。如果您正在寻找能够通过反向 Ajax 向浏览器发送消息的服务器,我可以建议类似 StreamHub Reverse Ajax。
如果有其他方法,您认为 Facebook 和 Google 为什么会这样做?
好吧,好吧,还有其他方法。您可以在页面中嵌入 Java 小程序。如果 Java 小程序已签名,并且用户授予它权限,它可以为服务器打开一个长时间运行的连接以向其发送事件。但这会让你得到更脆弱的东西,需要更多的用户交互,启动速度更慢,并且可以在比 Comet 更少的平台上工作。
已经讨论过将 server-sent events 和 web sockets 添加到 HTML5,但这是非常初步的,可能不会成为标准。
【讨论】:
由于“彗星”是任何使用现有 http 协议来模拟数据推送的人为术语,我担心你无能为力。
唯一的解决方案是对当前协议的“增强”或一些广泛使用的可能基于插件的解决方案......您可以使用 java 来实现。但这会引发其他问题,因为基本上您需要在该浏览器上提供可用的传入连接。
【讨论】:
Comet 可以作为一个长轮询 ajax 调用来实现,所以它是一个语义问题。 Here, for example, is a jquery plugin 在 jQuery 的 ajax 调用上使用 Bayeux 协议实现 Comet。
【讨论】: