WEB实时聊天 COMET推技术
- 格式:pdf
- 大小:254.58 KB
- 文档页数:11
web聊天室实现原理
Web聊天室实现原理
Web聊天室是一种交互式的实时通信方式,是目前互联网上最受欢迎的社交工具之一,许多人都喜欢使用Web聊天室与朋友交流。
那么,Web聊天室是如何实现的呢?
Web聊天室的实现原理主要分为三个部分:
1.客户端交互
客户端交互是指浏览器和用户端之间的交互。
在Web聊天室中,用户可以在浏览器上输入聊天内容、发送消息和接收消息。
浏览器会将用户的聊天信息传递给服务器,服务器会返回消息给用户,并将消息发送给其他在线用户。
2.服务器端逻辑
服务器端逻辑主要包括数据库管理、消息的接收和处理、聊天历史记录的查询和存储。
当用户发送一条消息时,服务器会将消息保存在数据库中。
当其他用户登录聊天室时,服务器会向客户端发送聊天历史
记录。
同时,服务器还需要处理用户退出聊天室或关闭浏览器时的逻辑。
3.网络协议
Web聊天室的实现需要借助网络协议。
在网络层面上,Web聊天室使用Socket协议实现客户端和服务器之间的通信。
在HTTP协议的基础上,Web应用程序与服务器交互需要使用WebSocket协议来实现双向通信。
总之,Web聊天室的实现原理主要包括客户端交互、服务器端逻辑和网络协议。
通过这些方式,用户可以在互联网上实时交流、分享信息和表达自己的观点,为人们的社交互动提供了很大的便利。
基于Web的实时信息推送技术的研究的开题报告一、选题背景随着互联网和移动互联网的跨越式发展,人们对于信息的获取和传递要求越来越高,而基于Web的实时信息推送技术随之应运而生。
实时信息推送技术不仅可以让用户及时地获得所关心的消息,同时也可以提高用户的浏览体验,增加网站的粘性和用户黏度,使用户更加依赖和信任网站。
二、研究内容本次课题旨在通过研究基于Web的实时信息推送技术,探究实时信息推送技术的实现原理、优点及在实际应用中的效果,并进一步研究其优化方案。
具体研究内容包括:1. 实时信息推送技术的概述:介绍实时信息推送技术的定义、工作原理以及相关技术领域的现状和发展趋势。
2. 实时信息推送技术的优势:分析实时信息推送技术与传统信息推送技术的差异和优劣,并探讨实时信息推送技术的应用前景和市场前景。
3. 实时信息推送技术的应用案例:结合实际案例,分析实时信息推送技术在社交、新闻、电商等领域的应用效果及相关问题。
4. 实时信息推送技术的优化方案:根据实际应用中的问题和挑战,探索实时信息推送技术的优化方案和未来发展方向。
三、研究方法本次课题将采用文献资料法、案例研究法、实验研究法等多种研究方法,具体包括:1. 文献资料法:通过查阅相关文献和资料,深入了解实时信息推送技术的发展历程、研究现状和前沿动态。
2. 案例研究法:选取不同领域的实时信息推送应用案例,通过实证研究方法,深入分析其实现机制、优缺点和优化方案。
3. 实验研究法:通过实验室实验和用户调查等方法,对实时信息推送技术的效果进行评估和优化。
四、预期成果本次研究的预期成果主要包括:1. 实时信息推送技术的概述和发展趋势报告;2. 实时信息推送技术的应用案例分析和评估报告;3. 实时信息推送技术的优化方案报告。
五、研究计划本次研究的计划如下:阶段一:文献资料研究时间:2周任务:查阅相关文献和资料,深入了解实时信息推送技术的概念、发展历程和研究现状。
阶段二:案例研究时间:4周任务:选取不同领域的实时信息推送应用案例,通过实证研究方法,深入分析其实现机制、优缺点和优化方案。
用Ajax+Comet轻松实现实时Web聊天系统
吴亚峰;李志昕;索依娜
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2010(000)003
【摘要】通过一个小型实时Web聊天系统的开发过程,向读者介绍了如何使用Ajax与Comet推送技术.通过使用Ajax+Comet推送技术可以大大提升传统Web应用的用户体验,消除传统Web应用"请求一响应"流程的负面效应.
【总页数】5页(P55-59)
【作者】吴亚峰;李志昕;索依娜
【作者单位】
【正文语种】中文
【相关文献】
1.基于Java语言的在线实时聊天系统的设计与实现 [J], 徐伟
2.基于Java语言的在线实时聊天系统的设计与实现 [J], 徐伟
3.基于WebService Behavior的Web页面数据实时显示技术研究与实现 [J], 杨启亮;邢建春;王平
4.基于HTML5 WebSocket的Web实时通信机制的研究与实现∗ [J], 陈丽枫;郑力新;王佳斌
5.轻松实现数据库上网——一个利用Foxweb实现Foxpro数据库上网的方案 [J], 孟楚麟
因版权原因,仅展示原文概要,查看原文内容请购买。
Web应用中的实时消息交互技术作者:衣鹏来源:《电子技术与软件工程》2016年第16期摘要本文主要介绍了Web实时消息交互技术,以及目前在Web应用中进行实时消息交互的一些主流技术。
【关键词】Web 实时消息随着Web的发展,客户端与服务端之间的实时消息交互成为人们沟通交流的重要方式。
比如门户网站的实时新闻、SNS网站的用户互动、企业网站的在线客服、大宗商品的即时交易、远程设备的实时监控等常见的场景都需要用到基于Web的实时消息交互技术。
1 概述Web实时消息交互应用需要服务器端实时地、主动地将后台出现的变化呈现在客户端的浏览器上,而无需客户手动地去刷新页面。
在传统的HTTP请求/响应模式下,客户端每建立一个连接都要向服务器端发送一个HTTP 请求,当收到来自服务器端的HTTP响应后,如果该响应完全被发送或接收,服务器端就会关闭该连接。
2 主流的Web实时消息交互技术2.1 客户端轮询模式(Polling)客户端通过执行网页中的JS轮询脚本,经由HTTP方式向服务器端定期循环的发送请求,询问是否有新的消息产生,接收来自服务器的请求响应,返回相应信息,如果服务器端没有响应,则会在相应的指令,关闭连接,等待后发送下一个请求。
优点:使用方便,实现简单,开发成本低,无需做过多的更改。
缺点:如果轮询间隔过长,会导致消息出现延迟,用户无法及时接收更新的数据。
如果轮询时间过短,则会导致查询请求过多,增加网络资源消耗,服务器易产生峰值请求。
2.2 长轮询模式(Long-Polling)又称服务端的轮。
它是指当客户端通过执行网页中的JS轮询脚本,经由HTTP方式向服务器端发送请求,建立连接后,如果服务器端没有新的数据,就会保持连接,不断地去查询后台消息,等待有效的更新,一旦有新消息产生,服务器就将消息返回给客户端。
客户端收到响应消息后会立即关闭链接,并发送新的请求,开始下一次新的轮询。
优点:时效性强,消息能及时返回客户端;无消息更新不会频繁请求,减少了不停地创建、关闭HTTP请求造成的不必要浪费。
Comet:基于HTTP 长连接的“服务器推”技术Comet 是一种新的Web 应用架构。
基于这种架构开发的应用中,服务器端会主动以异步的方式向客户端程序推送数据,而不需要客户端显式的发出请求。
Comet 架构非常适合事件驱动的Web 应用,以及对交互性和实时性要求很强的应用,如股票交易行情分析、聊天室和Web 版在线游戏等。
本文在介绍Comet 架构的基础上,详细说明了如何利用WebSphere Application Server Feature Pack for Web2.0 和Dojo 来开发基于Comet 的应用程序,并给出了两个具体的实例。
Comet 及相关技术简介Comet 指的是一种Web 应用程序的架构。
在这种架构中,客户端程序(通常是浏览器)不需要显式的向服务器端发出请求,服务器端会在其数据发生变化的时候主动的将数据异步的发送给客户端,从而使得客户端能够及时的更新用户界面以反映服务器端数据的变化。
这种架构既不同于传统的Web 应用,也不同于新兴的Ajax 应用。
在传统的Web 应用中,通常是客户端主动的发出请求,服务器端生成整个HTML 页面交给客户端去处理。
在Ajax 应用中,同样是客户端主动的发出请求,只是服务器通常返回的是XML 或是JSON 格式的数据,然后客户端使用这些数据来对页面进行局部更新。
Comet 架构非常适合事件驱动的Web 应用和对交互性和实时性要求很强的应用。
这样的应用的例子包括股票交易行情分析、聊天室和Web 版在线游戏等。
基于Comet 架构的Web 应用使用客户端和服务器端之间的HTTP 长连接来作为数据传输的通道。
每当服务器端的数据因为外部的事件而发生改变时,服务器端就能够及时把相关的数据推送给客户端。
通常来说,有两种实现长连接的策略:HTTP 流(HTTP Streaming)这种情况下,客户端打开一个单一的与服务器端的HTTP 持久连接。
服务器通过此连接把数据发送过来,客户端增量的处理它们。
websocket 聊天原理
WebSocket聊天原理是指基于WebSokcet技术实现的聊天功能的实现原理。
WebSocket是一种新的网络通信协议,它可以在浏览器和服务器之间建立持久化连接,使得服务器可以主动向浏览器推送数据,从而实现实时通信的功能。
WebSocket 聊天的实现流程大致如下:
1. 客户端发起 WebSocket 连接请求到服务器,服务器接收请求后进行握手操作。
2. 握手完成后,客户端和服务器之间建立起 WebSocket 连接,客户端可以向服务器发送消息,服务器也可以向客户端发送消息。
3. 当客户端发送消息时,消息会被封装成 WebSocket 数据帧,然后通过 WebSocket 连接发送到服务器,服务器接收到数据帧后进行处理,然后向所有连接到该服务器的客户端广播该消息。
4. 当服务器发送消息时,消息也会被封装成 WebSocket 数据帧,然后通过 WebSocket 连接发送到客户端,客户端接收到数据帧后进行处理,将消息展示给用户。
由于 WebSocket 可以实现双向通信,所以在聊天功能中,客户端和服务器之间可以实时地进行消息的传输和接收,从而达到实时聊天的效果。
需要注意的是,WebSocket 聊天需要服务器端支持 WebSocket 协议才能实现,同时也需要客户端浏览器支持 WebSocket 技术。
目
前主流的浏览器都已经支持 WebSocket 技术,因此可以考虑使用WebSocket 技术实现实时聊天功能。
使⽤Java实现Comet风格的Web应⽤(消息在线提醒)comet实现,原理:1、浏览器向服务器发⼀个请求2、服务器接到请求后在servlet或struts的Action中⽤线程将这个请求休眠,使服务器不直接响应结束,这样浏览器与服务器就建⽴了⼀个长连接,这是即时通信的基础。
3、设置response的属性,使其可以多次响应,这样只要有⼈给它消息,就可以out⼀句话,这句话是个script代码,浏览器就收到消息了。
开始在本⽂中,我将展⽰如何使⽤各种不同的技术构建⼀些简单的 Comet 风格的 Web 应⽤程序。
读者对 Servlet、Ajax 和 JavaScript 应该有⼀定的了解。
我们将考察 Tomcat 和 Jetty 中⼀些⽀持 Comet 的特性,因此需要使⽤这两个产品的最新版本。
本⽂使⽤ Tomcat 6.0.14 和Jetty 6.1.14.另外还需要⼀个⽀持 Java 5 或更⾼版本的 JDK.本⽂使⽤ JDK 1.5.0-16.此外还需要看看 Jetty 7 的预发布版,因为它实现了Servlet 3.0 规范,我们将在本⽂中研究该规范。
理解 Comet您可能已经听说过 Comet,因为它最近受到了⼀定的关注。
Comet 有时也称反向 Ajax 或端推技术(server-side push)。
其思想很简单:将数据直接从推到浏览器,⽽不必等到浏览器请求数据。
听起来简单,但是如果熟悉 Web 应⽤程序,尤其是 HTTP ,那么您就会知道,这绝不简单。
实现 Comet 风格的 Web 应⽤程序,同时保证在浏览器和服务器上的可伸缩性,这只是在最近⼏年才成为可能。
在本⽂的后⾯,我们将看看⼀些流⾏的 Java Web 服务器如何⽀持可伸缩的 Comet 架构,但⾸先我们来看看为什么要创建 Comet 应⽤程序,以及⽤于实现它们的常见设计模式。
使⽤ Comet 的动机HTTP 的成功⽏庸置疑。
WebRtc(⽹页即时通讯技术)知识点总结前⾔WebRTC,名称源⾃⽹页实时通信(Web Real-Time Communication)的缩写,简⽽⾔之它是⼀个⽀持⽹页浏览器进⾏实时语⾳对话或视频对话的技术。
并且还⽀持跨平台:windows,linux,mac,android,iOS。
实现原理P2P连接模式⼀般我们传统的连接⽅式,都是以服务器为中介的模式:类似http协议:客户端<——>服务端(当然这⾥服务端返回的箭头仅仅代表返回请求数据)。
进⾏即时通讯时,进⾏⽂字、图⽚、录⾳等传输的时候:客户端A——服务器——客户端B。
⽽点对点的连接恰恰数据通道⼀旦形成,中间是不经过服务端的,数据直接从⼀个客户端流向另⼀个客户端:客户端A——客户端B ... 客户端A——客户端C ...(可以⽆数个客户端之间互联)这个过程就像⾳视频通话的应⽤场景,我们服务端确实是没必要去获取两者通信的数据,⽽且这样做有⼀个最⼤的⼀个优点就是,⼤⼤的减轻了服务端的压⼒。
⽽WebRTC就是这样⼀个基于P2P的⾳视频通信技术。
客户端A与B建⽴p2p连接的过程1.A和B连接上服务端,建⽴⼀个TCP长连接(任意协议都可以,WebSocket/MQTT/Socket原⽣/XMPP),为了省事,直接采⽤WebSocket,这样⼀个信令通道就有了。
2.A从服务器获得ice server同时⽣成包含session description(SDP)的offer,发送给Socket服务端。
3.Socket服务端把A的offer和candidate转发给B,B会保存下A这些信息。
4.然后B发送包含⾃⼰session description的answer(因为它收到的是offer,所以返回的是answer,但是内容都是SDP)和ice candidate给Socket服务端。
5.Socket服务端把B的answer和ice candidate给A,A保存下B的这些信息。
浅析Comet技术在Java Web实时系统开发中的应用
钱宇虹
【期刊名称】《软件工程师》
【年(卷),期】2010(000)004
【摘要】Comet技术通过实现服务器推(server push)来解决AJAX需要定时频繁发送请求的问题,从而给Web实时系统带来了全新的交互性.本文分析了Comet技术的两种实现方式:长轮询方式(long-polling)和流方式(streaming),并通过一个服务器推送随即数的实例,展示了使用Comet技术开发Java Web实时系统的开发方法和步骤.
【总页数】3页(P45-47)
【作者】钱宇虹
【作者单位】武汉职业技术学院,计算机技术与软件工程学院,湖北,武汉,430074【正文语种】中文
【相关文献】
1.B/S构架下基于JavaEE与Comet技术的油气泄漏实时监控系统 [J], 邹碧海;蒲朝东;闫晓俊;马磊;冉恒鑫
2.基于Comet技术的WEB实时性应用的研究 [J], 刘媚;王旭阳
3.Java Web实时系统开发背景下Comet技术运用研究 [J], 穆俊
4.解析基于JSP/JavaBean技术的Web应用系统开发 [J], 刘菲
5.基于Comet属性同步的Java Web实时进度条研究 [J], 陈冈
因版权原因,仅展示原文概要,查看原文内容请购买。
前端开发知识:如何使用WebRTC和WebSockets来实现多人视频通话随着互联网的发展,人们越来越需要实时的视频通话,以便在远程交流时更好地沟通。
在前端开发领域,WebRTC和WebSockets是两种常用技术,可以帮助我们实现多人视频通话。
本文将从以下几个方面介绍如何使用WebRTC和WebSockets来实现多人视频通话。
1. WebRTC介绍WebRTC是Web实时通信(Web Real-Time Communication)的缩写,它是一个实时通信技术,可以在浏览器中实现音频、视频和数据的实时传输。
WebRTC提供了一种对等连接的方式,可以在浏览器之间建立直接的连接,而无需通过服务器中转数据。
这样可以提高通信的速度,并降低了服务端的压力。
WebRTC的特点包括:实时性、高品质、安全性。
2. WebSockets介绍WebSockets是一种全双工协议,允许浏览器和服务器之间进行实时通信。
它基于HTTP协议,但是可以建立长时间的连接,并且可以在任意时刻发送和接收数据。
WebSockets可以通过一个WebSocket对象来实现数据的发送和接收,它提供了一种简单的API,可以使用JavaScript轻松地实现实时通信。
WebSockets的特点包括:实时性、反应速度快、可靠性高、跨平台性好。
3.使用WebRTC和WebSockets实现多人视频通话要实现多人视频通话,需要对WebRTC和WebSockets进行一些整合。
在通话的过程中,我们需要不断向服务器发送和接收数据,以便将各个浏览器之间建立的连接协调好。
下面是实现多人视频通话的具体步骤:(1)创建一个WebSocket服务器,并在其中映射所有参与视频通话的用户。
(2)每个用户打开网页时,浏览器会向WebSocket服务器发送一个请求,并在服务器上映射自己的数据。
此时,服务器会将其他用户的数据发送给该用户,以便让他们进行视频通话。
(3)在WebRTC中,每个用户都会创建一个WebSocket连接,并且会向其他用户发送视频和音频数据。
Comet有时也称反向Ajax或服务器端推技术(server-side push)。
其思想很简单:将数据直接从服务器推到浏览器,而不必等到浏览器请求数据。
=============大体说明=======================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,仍需使用长轮询。
至此,您可能会想,长轮询和流都有一个很大的问题。
请求需要在服务器上存在一段较长的时间。
这打破了每个请求使用一个线程的模型,因为用于一个请求的线程一直没有被释放。
更糟糕的是,除非要发回数据,否则该线程一直处于空闲状态。
这显然不具有可伸缩性。
幸运的是,现代Web服务器有很多方式可以解决这个问题。
=============各个知识点的介绍=======================我们要了解反向Ajax、轮询(polling)、流(streaming)、Comet和长轮询(long polling),学习如何实现不同的反向Ajax通信技术,并探讨每种方法的优点和缺点。
Ajax、反向Ajax和WebSocket异步的JavaScript和XML(Asynchronous JavaScript and XML,Ajax),一种可通过JavaScript来访问的浏览器功能特性,其允许脚本向幕后的网站发送一个HTTP请求而又无需重新加载页面。
Ajax的出现已经超过了十年,尽管其名字中包含了XML,但你几乎可以在Ajax请求中传送任何的东西,最常用的数据是JSON,其与JavaScript语法很接近,且消耗更少带宽。
清单1给出了这样的一个例子,Ajax请求通过某个地方的邮政编码来检索该地的名称。
清单1.Ajax请求举例var url='/postalCodeLookupJSON?postalcode=' +$('#postalCode').val()+'&country='+$('#country').val()+'&callback=?';$.getJSON(url,function(data){$('#placeName').val(data.postalcodes[0].placeName);});在本文可下载的源代码中,你可在listing1.html中看到这一例子的作用。
反向Ajax(Reverse Ajax)本质上则是这样的一种概念:能够从服务器端向客户端发送数据。
在一个标准的HTTP Ajax请求中,数据是发送给服务器端的,反向Ajax可以某些特定的方式来模拟发出一个Ajax请求,这些方式本文都会论及,这样的话,服务器就可以尽可能快地向客户端发送事件(低延迟通信)。
WebSocket技术来自HTML5,是一种最近才出现的技术,许多浏览器已经支持它(Firefox、Google Chrome、Safari等等)。
WebSocket启用双向的、全双工的通信信道,其通过某种被称为WebSocket握手的HTTP请求来打开连接,并用到了一些特殊的报头。
连接保持在活动状态,你可以用JavaScript来写和接收数据,就像是正在用一个原始的TCP 套接口一样。
WebSocket会在这一文章系列的第二部分中谈及。
反向Ajax技术反向Ajax的目的是允许服务器端向客户端推送信息。
Ajax请求在缺省情况下是无状态的,且只能从客户端向服务器端发出请求。
你可以通过使用技术模拟服务器端和客户端之间的响应式通信来绕过这一限制。
HTTP轮询和JSONP轮询轮询(polling)涉及了从客户端向服务器端发出请求以获取一些数据,这显然就是一个纯粹的Ajax HTTP请求。
为了尽快地获得服务器端事件,轮询的间隔(两次请求相隔的时间)必须尽可能地小。
但有这样的一个缺点存在:如果间隔减小的话,客户端浏览器就会发出更多的请求,这些请求中的许多都不会返回任何有用的数据,而这将会白白地浪费掉带宽和处理资源。
图1中的时间线说明了客户端发出了某些轮询请求,但没有信息返回这种情况,客户端必须要等到下一个轮询来获取两个服务器端接收到的事件。
图1.使用HTTP轮询的反向AjaxJSONP轮询基本上与HTTP轮询一样,不同之处则是JSONP可以发出跨域请求(不是在你的域内的请求)。
清单1使用JSONP来通过邮政编码获取地名,JSONP请求通常可通过它的回调参数和返回内容识别出来,这些内容是可执行的JavaScript代码。
要在JavaScript中实现轮询的话,你可以使用setInterval来定期地发出Ajax请求,如清单2所示:清单2.JavaScript轮询setInterval(function(){$.getJSON('events',function(events){console.log(events);});},2000);文章源代码中的轮询演示给出了轮询方法所消耗的带宽,间隔很小,但可以看到有些请求并未返回事件,清单3给出了这一轮询示例的输出。
清单3.轮询演示例子的输出[client]checking for events...[client]no event[client]checking for events...[client]2events[event]At Sun Jun0515:17:14EDT2011[event]At Sun Jun0515:17:14EDT2011[client]checking for events...[client]1events[event]At Sun Jun0515:17:16EDT2011用JavaScript实现的轮询的优点和缺点:1.优点:很容易实现,不需要任何服务器端的特定功能,且在所有的浏览器上都能工作。
2.缺点:这种方法很少被用到,因为它是完全不具伸缩性的。
试想一下,在100个客户端每个都发出2秒钟的轮询请求的情况下,所损失的带宽和资源数量,在这种情况下30%的请求没有返回数据。
Piggyback捎带轮询(piggyback polling)是一种比轮询更加聪明的做法,因为它会删除掉所有非必需的请求(没有返回数据的那些)。
不存在时间间隔,客户端在需要的时候向服务器端发送请求。
不同之处在于响应的那部分上,响应被分成两个部分:对请求数据的响应和对服务器事件的响应,如果任何一部分有发生的话。
图2给出了一个例子。
图2.使用了piggyback轮询的反向Ajax在实现piggyback技术时,通常针对服务器端的所有Ajax请求可能会返回一个混合的响应,文章的下载中有一个实现示例,如下面的清单4所示。
清单4.piggyback代码示例$('#submit').click(function(){$.post('ajax',function(data){var valid=data.formValid;//处理验证结果//然后处理响应的其他部分(事件)processEvents(data.events);});});清单5给出了一些piggyback输出。
清单5.piggyback输出示例[client]checking for events...[server]form valid?true[client]4events[event]At Sun Jun0516:08:32EDT2011[event]At Sun Jun0516:08:34EDT2011[event]At Sun Jun0516:08:34EDT2011[event]At Sun Jun0516:08:37EDT2011你可以看到表单验证的结果和附加到响应上的事件,同样,这种方法也有着一些优点和缺点:1.优点:没有不返回数据的请求,因为客户端对何时发送请求做了控制,对资源的消耗较少。
该方法也是可用在所有的浏览器上,不需要服务器端的特殊功能。
2.缺点:当累积在服务器端的事件需要传送给客户端时,你却一点都不知道,因为这需要一个客户端行为来请求它们。