APP下载

基于ASP.NET及Comet技术的WEB即时通信系统的设计与实现

2010-03-27余勇

电脑与电信 2010年9期
关键词:轮询服务器端页面

余勇

(河南经贸职业学院,河南郑州450053)

1.Comet技术的背景

WEB应用程序工作的基础协议——HTTP协议是一个无状态、单向的协议,当客户端向服务器发送一个请求时,服务器就会处理这个请求,并发送数据给该客户端,从而完成对该请求的响应,紧接着服务器处理下一个请求,这个过程可以总结为“请求—应答模式”。由于是无状态的,并且在“请求—应答模式”这种单向模式下工作,因此,HTTP协议能够快速地为请求提供服务,每秒钟可以处理大量的请求,只需使用少量的服务器就可以为大量用户服务,因此,HTTP协议在当前的WEB开发中得到了广泛的应用。但是,“请求—应答模式”也有其局限性,那就是请求必须由客户端发出,而服务器则只能在对请求的响应中向客户端发送数据。这个局限性会影响很多类型WEB应用程序的实用性,如:基于WEB的聊天程序、即时通信系统、股票实时行情系统等。而Comet技术则可以较好地解决这个问题。

Comet技术被称为服务器“推”技术,它可以将服务器端的数据主动“推”送到客户端,当服务器端有新的数据时,Comet技术就可以将最新的信息“推”送到客户端,从而使客户端及时获得最新数据。当前,Comet这种服务器“推”技术多数是基于AJAX技术的,并有多种实现形式,如:轮询方式、长轮询方式、基于Iframe的流(stream ing)方式、基于客户端插件套接口的Comet技术等。

2.Comet技术所依托的AJAX技术介绍

Comet依托AJAX技术才得以更好地实现。AJAX的全称是异步JavaScript和XML(Asynchronous javascript and xml),其基本功能就是实现WEB页面与服务器端的无刷新交互。

AJAX技术是JavaScript技术与XML技术的综合应用,AJAX技术的基本原理就是通过建立XmlHttpRequest对象来向服务器发送异步请求,并从服务器获得数据,然后用JavaScript来操作DOM对象来更新页面,从而实现在不刷新页面的情况下将WEB服务器上已经改变的内容显示到WEB页面上,从而增强用户体验。本系统正是利用AJAX技术的这一特点。

3.Comet技术实现方式的选择及WEB即时通信系统的设计

Comet技术的主要实现形式有轮询方式、长轮询方式、基于Iframe的流(streaming)方式、基于客户端插件套接口的Comet技术等,各种实现方式的特点如下:

(1)轮询方式,在这种方式下使用AJAX技术向服务器发出调用请求,返回后等待一段固定的时间,然后再次请求,这样,服务器上的数据就会不断被“请求”到客户端,从而实现服务器数据即时更新到客户端的目的。轮询方式其实并不算真正意义上的实时,因为最新数据到达客户端的时间还取决于所等待的一段固定时间的长短。如果将等待的固定时间变得接近于零,那么客户端不断的请求则会对服务器造成很大的压力,这也是轮询方式的缺点。

(2)长轮询方式,与轮询方式类似,长轮询方式将请求保持更长时间,直到服务器有新数据或者超时,服务器将数据发送到客户端,并结束本次请求,从而开始下一次请求。长轮询方式的缺点就是要将请求一直保持,这也会影响服务器所能服务的客户端的数量。

(3)基于Iframe的流(stream ing)方式,这种方式通过在页面里嵌入一个Iframe隐蔵域,然后将这个隐蔵域的src属性设为一个长连接的请求页面,服务器端就能借助这个隐藏域不断地向客户端输出数据,客户端接收到数据后,通过JavaScript及AJAX技术将数据显示到页面上,从而实现服务器数据即时显示到客户端的目的。基于Iframe的流(stream ing)方式与长轮询方式类似,也需要将请求一直保持,同样影响服务器所能服务的客户端的数量。

(4)基于客户端插件套接口的Comet技术,如:Flash XMLSocket、Java小程序(Applet)等,这种方式需要客户端安装相应的插件,因此其局限性较强,只在一些特定系统及游戏中应用。

通过比较Comet技术的这几种实现形式,我认为长轮询方式在实现基于WEB的即时通信系统时最为适合。我们可以将基于Comet技术的WEB即时通信系统分为两个层次:业务逻辑层和表现层。业务逻辑层主要实现消息的封装及消息的发送功能;表现层主要实现数据的显示和数据的即时更新,以及提供用户操作的界面和接口。系统结构如图1所示。

4.基于Comet技术的WEB即时通信系统的实现

(1)业务逻辑层的实现

在业务逻辑层,一是需要定义消息类,实现对消息要素进行封装,从而便于发送该消息;二是消息发送类,可以实现将消息发送到连接服务器的所有需要接收消息的客户端。消息类及消息发送类的核心代码如下。

a.定义消息类

(2)表现层的实现

在表现层,一是设计用户操作界面,以提供用户操作的接口,同时,还需借助JavaScript和AJAX将接收到的数据显示出来;二是表现层需调用业务逻辑层的功能,实现消息的封装以及消息的发送。用户操作界面的HTML代码及相应的JavaScript和AJAX代码比较简单,本文省略;调用入口类的核心代码如下。

5.结束语

Comet技术在解决数据实时推送到客户端方面有着独特的优势,本文从Comet技术的基本原理入手,介绍了几种实现Comet的主流方法,并以其中一种方式结合AJAX技术实现了基于ASP.NET的即时通信系统。

由于服务器及客户端技术的不断发展,Comet的实现方法也会有更多更好的选择,在Comet广泛应用需求的基础上,Comet的应用会和AJAX一样变得更加普及。

[1] 文爱平、文德民.基于IE浏览器的A jax Comet架构[J].电脑知识与技术,2010,6:4646-4648.

[2] 钱宇虹.浅析Comet技术在Java Web实时系统开发中的应用[J].软件工程师,2010,4:45-47.

[3] 景慎艳.基于Pushlet的服务器推技术的研究与应用[J].现代计算机(专业版),2009,10:132-134.

[4] 孙清国、朱玮、刘华军、张鹏.Web应用中的服务器推送技术研究综述[J].计算机系统应用,2008,11:116-120.

猜你喜欢

轮询服务器端页面
刷新生活的页面
基于等概率的ASON业务授权设计∗
浅析异步通信层的架构在ASP.NET 程序中的应用
依托站点状态的两级轮询控制系统时延特性分析
利用时间轮询方式操作DDR3实现多模式下数据重排
在Windows中安装OpenVPN
网页防篡改中分布式文件同步复制系统
同一Word文档 纵横页面并存
浅析ASP.NET页面导航技术
数据链轮询多网优化设计方法研究*