`
qiujiayu
  • 浏览: 173183 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Comet, 下一代反向AJAX(即服务器推送技术- Server-side push)

阅读更多

Comet, 下一代反向AJAX(即服务器推送技术- Server-side push)

理解 Comet

您可能已经听说过 Comet,因为它最近受到了一定的关注。Comet 有时也称反向 Ajax 或服务器 端推技术 (server-side push)。其思想很简单:将数据 直接从服务器推到浏览器,而不必等到浏览器请求数据。听起来简单,但是如果熟悉 Web 应用 程序 ,尤其是 HTTP 协议,那么您就会知道,这绝不简单。实现 Comet 风格的 Web 应用程序,同时保证在浏览器和服务器上的可伸缩性,这只是在最近几年才成为可能。目前一些主流网站都有类似的原理,例如:webQQ、开心网、白社会等等,它们中消息动态都是采用类似的技术,也许具体实现方式不一样;

使用 Comet 的动机

HTTP 协议的成功毋庸置疑。它是 Internet 上大部分信息交换的基础。然而,它也有一些局限性。特别是,它是无状态、单向的协议。请求被发送到 Web 服务器,服务器处理请求并发回一个响应 — 仅此而已。请求必须由客户机发出,而服务器则只能在对请求的响应中发送数据。这至少会影响很多类型的 Web 应用程序的实用性。典型的例子就是聊天程序。另外还有一些例子,例如比赛的比分、股票行情或电子邮件程序。

HTTP 的这些局限性也是它取得一定成功的原因。请求/响应周期使它成为了经典的模型,即每个连接使用一个线程。只要能够快速为请求提供服务,这种方法就有巨大的 可伸缩性。每秒钟可以处理大量的请求,只需使用少量的服务器就可以处理很大数量的用户。对于很多经典的 Web 应用程序,例如内容管理系统搜索 应用程序和电子商务 站 点等等而言,这非常适合。在以上任何一种 Web 应用程序中,服务器提供用户请求的数据,然后关闭连接,并释放那个线程,使之可以为其他请求服务。如果提供初始数据之后仍可能存在交互,那么将连接保持为 打开状态,因此线程就不能释放出来,服务器也就不能为很多用户服务。

但是,如果想在对请求做出响应并发送初始数据之后,仍然保持与用户的交互呢?在 Web 早期,这一点常使用 meta 刷新实现。这将自动指示浏览器在指定秒数之后重新装载页面 , 从而支持简陋的轮询(polling)。这不仅是一种糟糕的用户体验,而且通常效率非常低下。如果没有新的数据要显示在页面上呢?这时不得不重新呈现同样 的页面。如果对页面的更改很少,并且页面的大部分没有变化呢?同样,不管是否有必要,都得重新请求和获取页面上的一切内容。

Ajax 的发明和流行改变了上述状况。现在,服务器可以异步通信,因此不必重新请求整个页面。现在可以进行增量式的更新。只需使用 XMLHttpRequest 轮询服务器。这项技术通常被称作 Comet。这项技术存在一些变体,每种变体具有不同的性能和可伸缩性。我们来看看这些不同风格的 Comet。

Comet 风格

Ajax 的出现使 Comet 成为可能。HTTP 的单向性质可以有效地加以规避。实际上有一些不同的方法可以绕过这一点。您可能已经猜到,支持 Comet 的最容易的方式是轮询(poll)。使用 XMLHttpRequest 向服务器发出调用,返回后,等待一段固定的时间 (通常使用 JavaScript 的 setTimeout 函数 ),然后再次调用。这是一项非常常见的技术。例如,大多数 webmail 应用程序就是通过这种技术在电子邮件到达时显示电子邮件的。

这 项技术有优点也有缺点。在这种情况下,您期望快速返回响应,就像任何其他 Ajax 请求一样。在请求之间必须有一段暂停。否则,连续不断的请求会冲垮服务器,并且这种情况下显然不具有可伸缩性。这段暂停使应用程序产生一个延时。暂停的时 间越长,服务器上的新数据就需要越多的时间才能到达客户机。如果缩短暂停时间,又将重新面临冲垮服务器的风险。但是另一方面,这显然是最简单的实现 Comet 的方式。

现在应该指出,很多人认为轮询并不属于 Comet。相反,他们认为 Comet 是对轮询的局限性的一个解决 方 案。最常见的 “真正的” Comet 技术是轮询的一种变体,即长轮询(long polling)。轮询与长轮询之间的主要区别在于服务器花多长的时间作出响应。长轮询通常将连接保持一段较长的时间 — 通常是数秒钟,但是也可能是一分钟甚至更长。当服务器上发生某个事件时,响应被发送并随即关闭,轮询立即重新开始。

长轮询相对于一般轮询 的优点在于,数据一旦可用,便立即从服务器发送到客户机。请求可能等待较长的时间,期间没有任何数据返回,但是一旦有了新的数据,它将立即被发送到客户 机。因此没有延时。如果您使用过基于 Web 的聊天程序,或者声称 “实时” 的任何程序,那么它很可能就是使用了这种技术。

长轮询有 一种变体,这是第三种风格的 Comet。这通常被称为流(streaming)。按照这种风格,服务器将数据推回客户机,但是不关闭连接。连接将一直保持开启,直到过期,并导致重新 发出请求。XMLHttpRequest 规范表明,可以检查 readyState 的值是否为 3 或 Receiving(而不是 4 或 Loaded),并获取正从服务器 “流出” 的数据。和长轮询一样,这种方式也没有延时。当服务器上的数据就绪时,该数据被发送到客户机。这种方式的另一个优点是可以大大减少发送到服务器的请求,从 而避免了与设置 服务器连接相关的开销和延时。不幸的是,XMLHttpRequest 在不同的浏览器中有很多不同的实现。这项技术只能在较新版本的 Mozilla Firefox 中可靠地使用。对于 Internet Explorer 或 Safari,仍需使用长轮询。

至 此,您可能会想,长轮询和流都有一个很大的问题。请求需要在服务器上存在一段较长的时间。这打破了每个请求使用一个线程的模型,因为用于一个请求的线程一 直没有被释放。更糟糕的是,除非要发回数据,否则该线程一直处于空闲状态。这显然不具有可伸缩性。幸运的是,现代 Java Web 服务器有很多方式可以解决这个问题。搞JAVA 开发程序员 ,相对而言比较幸运,PHP 目前还不是很多的

分享到:
评论

相关推荐

    服务端推技术 - Server-side Push 多示例

    服务端推技术,也称为Server-side Push,是一种网络通信模式,允许服务器主动向客户端推送数据,而无需客户端发起请求。这种技术在实时性要求较高的应用中尤为重要,如在线聊天、实时股票更新、游戏同步等。在传统的...

    服务器推送技术资料 server push

    服务器推送技术,也称为Server Push,是Web开发中一种创新的通信模式,旨在解决传统HTTP协议下服务器无法主动向客户端发送信息的问题。该技术源于Ajax技术的广泛应用,它改变了Web应用仅能通过用户触发请求获取数据...

    comet demo 向客户端推送例子

    Comet技术是一种基于HTTP长连接的反向Ajax技术,它允许服务器向客户端浏览器主动推送数据,从而实现双向通信。在Web应用中,通常的HTTP请求是客户端发起的,而Comet打破了这种模式,使得服务器可以在适当的时候主动...

    服务器推送示例-支持IE火狐谷歌等 - 更新后

    服务器推送技术是网络应用中的一种重要机制,它允许服务器主动向客户端发送数据,而不仅仅是响应客户端的请求。这种技术在实时性要求高的场景下非常有用,例如股票交易、在线聊天和实时更新的数据流。在本示例中,...

    ajax+"服务器推送"简单web聊天

    为了实现实时通信,一种常见的解决方案是“Ajax+服务器推送”技术,本文将围绕这个主题,特别是通过JSP实现一个简单的Web聊天应用,探讨其工作原理和技术细节。 【服务器推送】: 服务器推送是一种在服务器端主动向...

    一个完整的用ajax反转 server push(服务器主动向页面推送数据)技术实现的web聊天室源码

    在Web开发中,服务器主动向客户端推送数据的技术被称为Server Push,它是实时Web应用程序的重要组成部分,尤其是在构建聊天室、实时通知系统或在线游戏等场景中。本项目是一个利用Ajax反向推送(Comet技术)实现的...

    服务器推送技术

    【服务器推送技术】 服务器推送技术是一种网络通信模式,它与传统的客户端请求、服务器响应的HTTP协议有所不同。在传统的HTTP协议中,客户端(如浏览器)需要主动向服务器发送请求获取数据,而服务器推送技术则允许...

    Comet服务器推送技术

    Comet服务器推送技术是一种在Web应用中实现服务器主动向客户端推送数据的技术,它解决了传统HTTP协议下只能由客户端发起请求的局限。随着Ajax技术的普及,开发者希望在浏览器环境中实现更接近桌面应用的实时交互,而...

    服务器推--DWR中的push机制-Reverse_Ajax.docx

    为了解决这一问题,出现了“服务器推”(Server Push)技术,它允许服务器主动将数据推送到客户端,而无需客户端频繁发起请求。DWR(Direct Web Remoting)是一个开源Java库,它实现了服务器推功能,尤其是其2.0版本...

    comet4j 自己写的消息推送 觉得实用

    【标题】"comet4j 自己写的消息推送 觉得实用" 提示我们讨论的是一个自定义实现的基于 Comet4j 的消息推送系统。Comet4j 是一个开源的 Java 框架,用于实现实时的、双向的、基于 HTTP 长连接的消息推送服务,它解决...

    服务器推送技术之comet4j资源包

    Comet4j就是一种基于Java实现的服务器推送技术框架,旨在简化实时Web应用的开发过程。本资源包包含了实现Comet4j功能所需的关键组件,包括`comet4j.js`脚本文件和`comet4j-tomcat7.jar`服务器端库。 首先,让我们...

    dwr的例子 反向AJAX 实现时时提醒

    Direct Web Remoting (DWR) 是一个开源Java库,它允许在浏览器和服务器之间进行安全、高效的异步通信,即所谓的“反向AJAX”或“Comet”技术。DWR使得JavaScript能够调用服务器端的Java方法,就像它们是本地函数一样...

    反向ajax

    **反向Ajax(Reverse Ajax)**,又称为**Comet技术**,是Web开发中的一种创新方式,主要用于实现服务器向客户端的实时数据推送。在传统的Ajax应用中,主要是客户端通过JavaScript向服务器发送异步请求,获取数据并...

    DWR+JAVA进行web消息推送dwr-comet.zip

    在DWR中,Comet技术是实现长时间连接和实时数据推送的关键。 首先,我们需要了解Comet技术的基本概念。Comet是一种Web编程模式,用于实现在服务器向客户端推送数据时保持持久连接。传统的HTTP协议是基于请求-响应...

    反向ajax教程 (自己整理的两篇)

    反向Ajax,也称为Comet...总之,反向Ajax是Ajax技术的一种扩展,通过服务器主动推送数据增强了Web应用的实时性。通过轮询、Comet和PiggyBack等技术,开发者可以构建更加动态和响应式的Web应用,提供更优质的用户体验。

    web推送 comet技术

    总结来说,"web推送 Comet技术"利用了Comet4J框架和Tomcat7服务器,实现在Web应用中的实时数据推送。它挑战了传统的HTTP交互方式,提升了用户体验,但同时也带来了额外的系统管理和优化挑战。在开发过程中,理解...

    用DWR comet+Spring实现服务器推送的例子--网页聊天室

    标题中的“用DWR comet+Spring实现服务器推送的例子--网页聊天室”涉及到的是Web开发中的实时通信技术。DWR(Direct Web Remoting)是一个开源Java库,它允许JavaScript在浏览器和服务器之间进行直接的、安全的远程...

    dwr服务器推送,dwr.jar,推送,服务器ajax,dwr服务推送例子

    这个过程被称为“反向Ajax”或“服务器推送”,它能够实现在不依赖用户操作的情况下,服务器主动向客户端发送数据。 DWR的核心组件包括几个部分: 1. **Engine**:这是DWR的核心,负责处理JavaScript到Java的转换和...

Global site tag (gtag.js) - Google Analytics