当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《有没有办法将数据从Web服务器推送到浏览器?》经验,为你挑选了8个好方法。

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

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



1> Greg Hurlman..:

是的,您正在寻找的是COMET http://en.wikipedia.org/wiki/Comet_(programming).要搜索的其他优秀Google术语是AJAX-push和reverse-ajax.



2> Nosrama..:

是的,它被称为反向AjaxComet.Comet基本上是一个总称,用于打开长期HTTP请求的不同方式,以便将数据实时推送到Web浏览器.我推荐使用StreamHub Push Server,他们有一些很酷的演示,比其他任何服务器都更容易上手.查看Comet入门和StreamHub教程快速入门.您可以使用可免费下载的Community Edition,但仅限20个并发用户.商业版非常值得单独支持,另外还有SSL和Desktop .NET和Java客户端适配器.可以通过Google Group获得帮助,网上有很多教程,还有一个GWT Comet适配器.


Comet的解释将有助于这个答案

3> pafinde..:

现在你应该使用WebSockets.这是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
};

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


我完全同意......使用HTTP进行双向通信就像在REST调用中思考让Mario跳上龟壳......这是疯狂的.您不需要提出请求并等待简单按钮的响应推动人们....你只是没有.HTTP是一种文档协议.超文本传输​​协议.Ajax Push是一种非常复杂的方法,可以绕过HTTP来完成WebSocket的设计工作.停止愚蠢并使用正确的工具来完成工作.
与服务器发送的事件:http://stackoverflow.com/questions/5195452/websockets-vs-server-sent-events-eventsource

4> Dan Herbert..:

看看Comet(Ajax是一个清洁代理,而Comet也是如此),这基本上是"反向Ajax".请注意,这需要为每个用户提供长期服务器连接以接收通知,因此请在编写应用程序时注意性能影响.

http://en.wikipedia.org/wiki/Comet_(programming)



5> jvenema..:

彗星绝对是你想要的.根据您的语言/框架要求,可以使用不同的服务器库.例如,WebSync是ASP.NET/C#/ IIS开发人员的IIS集成彗星服务器,如果您需要与其他语言更紧密地集成,还有许多其他独立服务器.



6> Pablo Alsina..:

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

对于一个Web应用程序的"呼叫中心控制面板",它涉及更新现有Callcenter的代理和呼叫队列状态,我们开发了一个可行的内部解决方案,但远离您可以使用的库.

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

我们的网络客户端通过HTTP连接到此网络服务器,并要求提供最后一张照片(以XML格式编码),显示它然后再次请求新照片.此时的网络服务器可以:

如果有的话,请返回新照片

阻止客户端几秒钟(在我们的设置中为30)等待某些事件发生并改变照片.如果此时没有生成任何事件,则返回相同的照片,仅允许连接保持活动状态而不会使客户端超时.

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

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

如果有人可以提供这个实际的轻量级实现,太棒了!



7> Gilles..:

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



8> ᆼᆺᆼ..:

另一种标准方式是SSE(服务器发送事件,也称为EventSource,在JavaScript对象之后).

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有