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

Javascript 如何将数据推送到网页客户端?,javascript,ajax,Javascript,Ajax,我刚刚了解了AJAX推送引擎,但它运行在Linux/Apache上,这对我来说不是一个选项 目前使用AJAX来保持页面的最新状态,我必须频繁地轮询服务器,这对于高流量的站点来说并不太好。只有在必要时才将数据推送到客户机的选项是一个很好的选项,但是本机JavaScript不支持sockets,AFAIK。我读到的一个技巧是,使用Flash模块处理套接字通信,并将消息转发到JavaScript,但该站点现在已经不存在了 研究这种方法的麻烦在于,作为关键字的“JavaScript push”为数组提

我刚刚了解了AJAX推送引擎,但它运行在Linux/Apache上,这对我来说不是一个选项

目前使用AJAX来保持页面的最新状态,我必须频繁地轮询服务器,这对于高流量的站点来说并不太好。只有在必要时才将数据推送到客户机的选项是一个很好的选项,但是本机JavaScript不支持sockets,AFAIK。我读到的一个技巧是,使用Flash模块处理套接字通信,并将消息转发到JavaScript,但该站点现在已经不存在了

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

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

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

您想要的是,或者我也会查一下


这个(DWR)库支持反向Ajax,这听起来像是您正在寻找的。它支持Comet(以及轮询和搭载)。他们网站上的更多信息:

这是很有趣的东西,但我没有在这些Wiki页面上读到任何关于可伸缩性问题的内容。如果有10000个打开的长轮询连接,web服务器会做什么

另外,对于那些不熟悉底层概念的人来说,重要的是要理解,以一种特别的方式将数据从服务器推送到客户机是不可能的,而且永远是不可能的。即使HTTP协议支持这一点,网络也不会这样做,特别是在涉及NAT防火墙的情况下


因此,任何声称提供服务器推送通信的解决方案都必须依赖于由客户端启动、保持打开并最终超时的连接。我对此表示担忧,因为这肯定会对服务器的可伸缩性和性能产生负面影响。

您要找的是websocket(我刚刚整理了我的参考资料:)facebook和google似乎使用长轮询,但它们还没有崩溃。无论如何这都不是不可能的。如果您想从服务器打开到客户端的连接,而NAT妨碍了使用端口敲击方法建立连接。然后你可以维护一个插座。我关心的是服务器的限制,使许多套接字保持活动状态。如果我能检测到客户端是否空闲,我至少会偶尔重置连接或空闲掉非活动客户端。好吧,altCognito,如果Todd Hoff在他的博客上是对的,那么Facebook去年1亿美元的硬件投资就解决了这个问题。但是本文还有一些关于服务器实现的其他细节。显然,在.Net或任何其他主流Web服务器/语言平台的IIS上,长轮询都不是您想要做的事情,因为每个被阻止的连接都占用了昂贵的资源。我发现了一些相关的问题,这些问题导致了一些答案。。。还有更多问题。:)