是否可以让Web服务器在没有Comet的情况下向Web浏览器发送消息?
像Facebook和Google这样的大型网络公司都使用Comet来实现这一目的,如果为主流浏览器启用了tcp连接,它就像是一个丑陋的黑客等待消失。
答案 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 events和web sockets的讨论,但这是非常初步的,可能不会成为标准。
答案 2 :(得分:2)
因为“Comet”是任何使用现有http协议来模拟数据推送的人的术语,我担心你无能为力。
唯一的解决方案是当前协议的“增强”或一些广泛使用的可能基于插件的解决方案......你可以使用java。但这会引发其他问题,因为基本上你需要在该浏览器上提供传入连接。
答案 3 :(得分:2)
Comet可以实现为只是一个长轮询的ajax调用,所以它是一个语义问题。 Here, for example, is a jquery plugin在jQuery的ajax调用上使用Bayeux协议实现Comet。