有什么方法可以将数据从Web服务器推送到浏览器?

时间:2020-03-05 18:41:31  来源:igfitidea点击:

我当然知道Ajax,但是Ajax的问题​​在于浏览器应该经常轮询服务器以查找是否有新数据。这会增加服务器负载。

除了频繁轮询服务器之外,还有什么更好的方法(甚至使用Ajax)吗?

解决方案

回答

是的,我们正在寻找的是COMET http://en.wikipedia.org/wiki/Comet_(编程)。要搜索的其他优质Google术语是AJAX-push和反向ajax。

回答

研究Comet(它是Ajax是清洁剂的事实的欺骗,Comet也是如此),它基本上是"反向Ajax"。请注意,这要求每个用户都有长寿命的服务器连接才能接收通知,因此在编写应用程序时请注意性能影响。

http://en.wikipedia.org/wiki/Comet_(编程)

回答

打开与服务器的连接后,它可以保持打开状态,服务器可以推送内容。很久以前,我曾使用过multipart / x-mixed-replace,但这在IE中不起作用。

我认为我们可以通过轮询来做一些聪明的事情,通过不发送内容不变的标头,而是保持连接打开,使其更像推送,但我从未做过。

回答

还有其他方法。不知道它们在情况下是否"更好"。我们可能有一个Java applet,该Java applet在页面加载时连接到服务器,并等待服务器发送内容。这在启动时会慢很多,但是将允许浏览器不频繁地从服务器接收数据,而无需轮询。

回答

如果我们正在使用jsp页面,也可以查看Java Pushlets。

回答

通过使用持久的http连接,可以实现目标。

在Wikipedia上查看Comet文章,这是一个不错的起点。

我们提供的信息不多,但是如果我们正在考虑构建某种事件驱动的网站(a'la digg spy)或者类似的东西,我们可能会希望实现与之连接的隐藏IFRAME一个从不关闭连接的URL,然后我们将脚本标记从服务器推送到客户端以执行更新。

回答

我强烈建议我们花一些时间在Comet上,但是我不知道我们可以使用的实际实现或者库。

对于Web应用程序的某种"呼叫中心控制面板",其中涉及为实时Callcenter更新代理和呼叫队列状态,我们开发了一种内部解决方案,该解决方案可以工作,但离我们可以使用的库很远。

我们要做的是在与电话系统对话的服务器上实现一个小型服务,等待新事件并维护情况的照片。该服务提供了一个小型Web服务器。

我们的Web客户端通过HTTP连接到该Web服务器,并索要最后一张照片(以XML编码),将其显示,然后再次查找新照片。此时,Web服务器可以:

  • 返回新照片(如果有)
  • 阻止客户端几秒钟(在我们的设置中为30秒),以等待发生某些事件并更改照片。如果此时未生成任何事件,它将返回同一张照片,仅允许连接保持活动状态,而不会使客户端超时。

这样,当客户端进行轮询时,它将在最多0到30秒内得到响应。如果已经生成了新事件,则立即获取它),否则它将阻塞直到生成新事件。

它基本上是轮询,但是它有点聪明,不会使Web服务器过热。如果Comet不是答案,我相信可以使用相同的想法来实现,但是可以使用更广泛的AJAX或者JSON编码以获得更好的结果。这是在AJAX时代之前设计的,因此还有很多改进的空间。

如果有人可以提供这种方法的实际轻量级实现,那就太好了!

回答

彗星实际上是由Dojo Toolkit(http://www.dojotoolkit.org)的Alex Russell创造的。这是更多信息的链接http://cometdproject.dojotoolkit.org/

回答

Comet的一个有趣替代方法是在Flash中使用套接字。

回答

我们可以尝试我们的Comet组件,尽管它是非常实验性的...!

回答

我们可以在客户端上将Flash / Flex应用程序与服务器端上的BlazeDS或者LiveCycle一起使用。可以使用RTMP连接将数据推送到客户端。请注意,RTMP使用非标准端口。但是,如果端口被阻塞,我们可以轻松地返回轮询。

回答

值得一看的是Meteor Server,这是专为COMET设计的Web服务器。不错的演示,twitterfall也使用了它。

回答

可能还想看看ReverseHTTP。

回答

是的,它叫做反向Ajax或者Comet。 Comet基本上是总括性术语,用于表示打开长期HTTP请求以将数据实时推送到Web浏览器的不同方式。我建议使用StreamHub Push Server,它们有一些不错的演示,并且比其他任何服务器都更容易上手。查看《 Comet和StreamHub入门指南》以获取快速介绍。我们可以使用社区版,该社区版可免费下载,但仅限20个并发用户。仅提供支持就值得使用商业版本,此外,我们还可以获得SSL以及Desktop .NET和Java客户端适配器。可通过Google网上论坛获得帮助,网络上有很多教程,还有GWT Comet适配器。

回答

彗星绝对是我们想要的。根据语言/框架要求,有不同的服务器库可用。例如,WebSync是面向ASP.NET/C#/IIS开发人员的IIS集成的彗星服务器,如果我们需要与其他语言进行更紧密的集成,则还有很多其他独立服务器。