如何将数据推送到网页客户端?

时间:2009-06-04 16:14:04

标签: javascript ajax

我刚刚了解了AJAX Push Engine,但它在Linux / Apache上运行,这对我来说不是一个选择。

http://www.ape-project.org/

目前使用AJAX来保持页面最新,我必须经常轮询服务器,这对于高流量站点来说并不是很好。仅在必要时将数据推送到客户端的选项是一个很好的选择,但本机JavaScript不支持套接字,AFAIK。我读到的一个技巧,但现在网站已经不复存在,就是使用Flash模块处理套接字通信并将消息转发给JavaScript。

研究这种方法的麻烦在于,“JavaScript push”作为关键字提出了数组的推送功能而不是我想要的上下文。

如何与服务器建立持久连接以在浏览器中进行推送通信?我是否需要Flash / ActionScript,还是有其他选项适用于所有当前活动的浏览器? (IE6 / 7/8,FF3,Safari,Chrome)

当涉及到服务器时,我还需要解决由于Origin策略和端口安全性引起的复杂问题。我很感激您能指出的任何可以解释可用选项的内容。

4 个答案:

答案 0 :(得分:4)

你想要的是COMET,或者我也会查找long polling

I asked a similar question.

答案 1 :(得分:0)

Direct Web Remoting(DWR)库支持反向Ajax,听起来就像你在寻找的那样。它支持Comet(以及Polling和PiggyBack)。有关其网站的更多信息:http://directwebremoting.org/dwr/index.html

答案 2 :(得分:0)

这是有趣的东西,但我没有在这些Wiki页面上阅读有关可伸缩性问题的任何内容。如果您有10,000个开放的长轮询连接,那么Web服务器会做什么?

此外,对于那些不熟悉基本概念的人来说,重要的是要理解以临时方式将数据从服务器推送到客户端是不可能的,而且永远都是如此。即使HTTP协议支持此功能,网络也不会,特别是如果涉及NAT防火墙。

因此,声称提供服务器推送通信的任何解决方案都必须依赖于客户端发起的连接,保持打开状态,并最终超时。我担心这一点,因为它必然会对服务器的可扩展性和性能产生负面影响。

答案 3 :(得分:0)

你要找的东西是websocket https://en.wikipedia.org/wiki/WebSocket