Ajax 有没有办法将数据从web服务器推送到浏览器?

Ajax 有没有办法将数据从web服务器推送到浏览器?,ajax,webserver,comet,Ajax,Webserver,Comet,当然我知道Ajax,但Ajax的问题是浏览器应该经常轮询服务器以查找是否有新数据。这会增加服务器负载 除了频繁轮询服务器,还有什么更好的方法(即使使用Ajax)吗?是的,您正在寻找的是COMET。谷歌搜索的其他好词是AJAX推送和反向AJAX。看看Comet(对AJAX是一种清洁剂,Comet也是一种清洁剂这一事实的恶搞),它基本上是“反向AJAX”请注意,这需要每个用户都有一个长期的服务器连接才能接收通知,因此在编写应用程序时要注意性能问题 一旦打开与服务器的连接,它就可以保持打开状态,并且服

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


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

是的,您正在寻找的是COMET。谷歌搜索的其他好词是AJAX推送和反向AJAX。

看看Comet(对AJAX是一种清洁剂,Comet也是一种清洁剂这一事实的恶搞),它基本上是“反向AJAX”请注意,这需要每个用户都有一个长期的服务器连接才能接收通知,因此在编写应用程序时要注意性能问题


一旦打开与服务器的连接,它就可以保持打开状态,并且服务器可以推送内容。很久以前,我使用了
多部分/x-mixed-replace
,但这在IE中不起作用


我认为你可以用轮询做一些聪明的事情,使它更像推送,不发送内容不变的标题,但保持连接打开,但我从来没有这样做过

还有其他方法。不确定他们在你的情况下是否“更好”。您可以有一个Java小程序,它在页面加载时连接到服务器,并等待服务器发送内容。启动时会慢一点,但允许浏览器不频繁地从服务器接收数据,而无需轮询。

您还可以查看是否使用jsp页面。

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

看看维基百科上的文章,这是一个很好的开始


你没有提供太多的信息,但如果你想建立某种事件驱动的网站(a'la digg spy)或者类似的东西,您可能会考虑实现一个隐藏的IFRAME,它连接到一个url,该url的连接永远不会关闭,然后您将脚本标记从服务器推送到客户端以执行更新。

我强烈建议在Comet上投入一些时间,但我不知道您可以使用的实际实现或库

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

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

我们的web客户端通过HTTP连接到此web服务器,请求最后一张照片(用XML编码),显示它,然后再次请求新照片。此时的Web服务器可以:

  • 如果有新照片,请返回
  • 阻塞客户端几秒钟(在我们的设置中为30秒),等待事件发生并更改照片。如果此时未生成任何事件,它将返回相同的照片,只允许连接保持活动状态,而不使客户端超时
这样,当客户端轮询时,它最多在0到30秒内得到响应。如果已经生成了新事件,它会立即得到响应),否则它会阻塞,直到生成新事件

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


如果有人能提供一个实际的轻量级实现,那就太好了

彗星实际上是由DojoToolkit()的Alex Russell创造的。这里是更多信息的链接

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

你可以试试我们的——尽管它是非常实验性的

您可以在客户端使用Flash/Flex应用程序,在服务器端使用BlazeDS或LiveCycle。可以使用RTMP连接将数据推送到客户端。请注意,RTMP使用非标准端口。但是,如果端口被阻塞,您可以很容易地返回轮询。

可能值得检查哪一个是专为COMET设计的web服务器。很好,它也被使用。

可能也想看看。

是的,它被称为反向AjaxComet。Comet基本上是一个总括术语,用于表示打开长期HTTP请求以将数据实时推送到web浏览器的不同方式。我建议,他们有一些很酷的演示,而且比其他任何服务器都更容易入门。请查看快速介绍。您可以使用Community Edition,该版本可免费下载,但限制为20个并发用户。商业版是值得的,因为它仅支持SSL和Desktop.NET&Java客户机适配器。可以通过提供帮助,网上有很多教程,还有一个。Comet绝对是您想要的。根据您的语言/框架要求,可以使用不同的服务器库。例如,如果您需要与其他语言进行更紧密的集成,还有许多其他独立服务器。

请查看此库,了解如何在数据可用时将数据动态推送到客户端。

现在您应该使用WebSocket。 这是2011年的标准,允许启动与HTTP的连接,然后将其升级为基于消息的双向客户机-服务器通信

您可以轻松地从javascript启动连接:

var ws = new WebSocket("ws://your.domain.com/somePathIfYouNeed?args=any");
ws.onmessage = function (evt) 
{
  var message = evt.data;
  //decode message (with JSON or something) and do the needed
};

服务器端处理取决于您的技术堆栈。

另一种标准方式是,在JavaScript对象之后。

当然是要走的路,一旦您自己开始实现它,您就会意识到还有很多事情要做-重新连接,很长时间