Web信息系统异步编程模式的探讨

2012-12-23 09:53葛中泽
关键词:服务器端线程邮件

葛中泽,邹 蕊

(鄂州大学计算机系,湖北鄂州 436000)

Web信息系统异步编程模式的探讨

葛中泽,邹 蕊

(鄂州大学计算机系,湖北鄂州 436000)

在Web信息系统的开发过程中,将Web多线程技术和Ajax技术有机结合起来,提出了一种异步编程模式,有效地解决同步编程模式会出现开销大且费时的程序段阻塞当前进程,以及在客户端无法实时读取服务器端进程状态信息的问题.在开发“在线图书管理信息系统”中多次使用了异步编程模式,并经过一年的使用证明,该方法是可靠和行之有效的.

异步编程模式;同步编程模式;Ajax;多线程

1 Web信息系统中同步编程模式存在的问题

Web信息系统同步编程模式是指客户端向服务器发出请求后就一直等待服务器处理结果的一种编程方式.如果服务器处理任务复杂,费时较长,客户端势必长时间等待,且客服端无法知晓服务器处理该复杂任务的进度.

如在在线图书管理信息系统的研发中,需要定期将用户的借阅信息以邮件的形式发送到用户的邮箱中.图1是在线图书管理信息系统的结构图,邮件的发送是由邮件服务器来实现的,如果企业的经费充足,可以自己驾设内部的邮件服务器,否则就利用互联网上的公用邮件服务器[1].

图1 在线图书管理信息系统的架构

当管理员点击邮件发送命令时,Web服务器以客户端的形式向邮件服务器发送请求,邮件服务器收到请求后开始发送邮件.笔者在系统的研发中遇到邮件服务器在短时间内发送大量的邮件时,就会出现错误而停发的问题.因此,只要每间隔3 s发送一封邮件,服务器就不会出现错误.邮件同步发送的过程如图2所示.

图2 大批量邮件同步发送的时序图

邮件以同步方式发送存在2个问题:1)由于大批量邮件的发送需要很长时间(100封邮件大约需要6 min),使得Web服务器处于阻塞状态,不能执行其他任务;2)用户无法了解邮件发送的进程,既不知道发送了多少邮件,也不知道还有多少邮件需要发送.为了解决同步方式发送存在的问题,采用异步编程的模式是最佳方式.

2 Web信息系统异步编程模式

Web信息系统异步编程模式是指客户端向Web服务器发送请求后,Web服务器以多线程的方式处理客户的任务,客户不需要等待服务器的处理结果,而是通过异步通信方式向服务器查询结果.其优点是客户端不用等待服务器的返回结果,且节约时间;客户端可以通过向服务器轮询得到处理任务的中间进程和数据,掌握服务器处理进度.传统的Ajax技术以异步方式与服务器通信,在客户端进行异步更新,实现异步编程;如果需要采集服务器的中间过程数据,还必须结合服务器的多线程技术及服务器的会话对象进行处理.Web信息系统异步编程包括Ajax技术和多线程技术,这是两者结合的一种应用技术.

多线程技术是实现需要并发执行的应用程序的较好选择,尤其对于大部分时间被阻塞的程序段,例如在开发访问网络资源,系统开销比较大的操作或实现快速的用户界面响应时,具有不可替代的作用[2].

目前多数操作系统支持多任务调度和处理,多任务通常包括两大类:多进程和多线程.多进程是指在系统中正在运行的多个应用程序;多线程是系统分配处理器时间资源的基本单元,或者说线程是进程中的基本执行单元.对操作系统而言,其调度单元是线程.一个进程至少包括一个线程,称之为主线程.一个进程从主线程的执行开始而创建一个或多个次线程,就是所谓基于多线程的多任务[3].

Ajax(Asynchronous Java Script and XML)的含意是异步JavaScript和XML.实际上Ajax是对现有技术(如JavaScript,XML,XHTML,CSS和XMLHTTP等)的一种组合.相对于传统的Web应用程序,Ajax有许多优势:异步通信模式、最少的数据传送量、减少服务器的负载、用户体验的连贯性、页面上下文的保持等等.Ajax使用现存的技术为客户端提供了与Web服务器之间进行异步通信的方式,从而让应用程序可以摆脱传统请求响应模型的开发方式[4].

下面以在线图书管理信息系统的大批量邮件发送为例,来探讨Web信息系统中的异步编程模式.图3是大批量邮件异步发送的时序图.

图3 大批量邮件异步发送的时序图

图3中1~5是主线程,a~g是发送邮件的辅助进程,6~9是客户端异步无刷新查询进程.辅助进程是由主线程创建的执行长时间费时任务的一个进程;2个进程执行各自的任务,互不影响.查询进程使用Ajax技术,用来查询辅助进程中的状态信息,掌握辅助进程的进度.

3 Web信息系统异步编程模式的实现

3.1 编制业务类和封装Web信息系统业务 在在线图书管理信息系统中,邮件的发送是一个独立的业务,因此,把发送邮件编制成一个webmail类,用来封装邮件数据和发送过程[5].webmail类属性有:

1)state标志邮件发送过程中的状态:0为没有开始,1为正在运行,2为成功结束,3为失败结束.

2)percent表示邮件发送的进度.

3)from邮件的源地址.发送邮件前,先需要到邮件站点上注册免费邮箱,利用邮件提供商的smtp服务器发送邮件.

4)userName源邮箱的用户名.即申请的免费邮箱的用户名.

5)userPassword源邮箱的密码.

6)smtpServer smtp服务器的地址.

7)classId学生班级的ID号.根据班级号在数据库中可以查询到学生的借阅信息和邮箱地址.

8)StartTime邮件发送开始时间.

9)endTime邮件发送结束时间.

10)ErrorTime邮件发送出错时间.

webmail类的方法有:

send()发送批量学生借阅信息到学生邮箱.send()方法的执行流程如图4所示.

图4 webMail类send()方法流程图

3.2 Web信息系统多线程异步编程 图3中第4步是在Web服务器中创建邮件发送的线程,向邮件服务器请求发送邮件.实现方法:

System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart (myMail.send));∥创建一个线程;myMail是webMail类的实例

thread.Start();∥启动线程

3.3 Web信息系统异步查询业务进程的实现 邮件的发送是通过webMail类的myMail实例和多线程异步来完成的,所关心的信息(邮件发送是否正常,发送进度如何,用了多长时间)就保留在myMail对象中,只要在客户端定时向服务器查询该对象的属性,就能动态知道邮件发送的相关情况.采用Ajax异步无刷新技术,具体步骤为:

步骤1 在页面中添加一个scriptManager控件,同时为了显示信息,在页面中加一个Label标签,另外用一个沙漏图像来表示查询正在进行中;

步骤2 在客户端添加一个js文件,在该文件中设计一个定时器的Timer类[6],并且在scriptManager控件中引用该js文件;

步骤3 在客户端创建定时器Timer类的对象,并初始化该对象.有了此定时器,可以轮询服务器,不断地获取信息;

步骤4 为了在服务器端建立与客户端的通信,在服务器端的页面中需要实现ICallBackEventHandler接口.在接口的RaiseCallbackEvent事件中添加读取myMail对象属性的代码,然后在GetCallbackResult事件中将属性信息返回到客户端;

步骤5 为了保证“用户离开页面,再返回该页面”状态信息显示的连续性,在服务器的Page_load事件中,使用session对象来保存myMail对象,这一点是非常重要的[7].即

protected void Page_Load(object sender,EventArgs e)

{∥判断Session["myMail"]是否存在;如果不存在,创建一个webMail对象并∥保存在Session[" myMail"]中;如果存在,就从Session["myMail"]中读出∥webMail对象.

步骤6 在客户端定义CallServer和ReceiveServerData函数,其中CallServer函数用于向服务器端发送请求,ReceiveServerData函数将接收到的数据显示到客户端.客户端与服务器端通信的过程如图5所示[8].

图5 客户端与服务器端通信过程

步骤7 由于要动态的读取邮件的发送信息,在客户端定时器的OnTick事件中添加对CallServer函数的调用,并在ReCeiveServerData函数中刷新状态信息.这样,就能跟踪邮件发送的过程,随时掌握发送信息.

4 结束语

Web信息系统异步编程模式是客观存在的一种相对于同步模式的程序设计模式,其思路和方法完全不同于后者,其将Ajax技术和多线程技术有机地结合起来,用于Web信息系统的开发中,有效地解决同步模式中的程序阻塞与进程查询问题.同步模式和异步模式在Web信息系统的开发中互为补充,各有所长,只有将二者结合起来,才能够发挥各自的作用,开发出高质量的软件.

笔者在在线图书管理信息系统项目的开发中,利用Web信息系统异步编程模式,有效地解决了大批量电子邮件的发送及进度显示中的问题;除此之外,该模式还可导入Excel文件,生成Excel报表等,并在多个地方使用,其效果很好.

[1]季久峰.Asp.NET开发答疑[M].北京:人民邮电出版社,2004:390-393.

[2]黄乐.一个基于多线程的.NET开发应用实例研究[J].计算机与现代化,2006(7):59-61.

[3]甘群文..C#多线程同步与异步的实现[J].电脑开发与应用,2009(9):35-40.

[4]王健南.Asp.NET Ajax中的Web Services调用[J].农业网络信息,2007(12):173-174.

[5]李海.深入研究Visual Basic.NET[M].北京:电子工业出版社,2003:104-115.

[6]文博.Asp.NET Ajax客户端编程浅析[J].中国科技信息,2008(1):108-109.

[7]陈伟,卫琳.Asp.NET 3.5网站开发实例教程[M].北京:清华大学出版社,2009:43-45.

[8]章立民.Asp.NET 3.5 Ajax客户端编程精选166例[M].北京:科学出版社,2009:554-580.

Mode of Asynchronous Programming in Web Information System

GE Zhong-ze,ZOU Rui

(Department of Computer Science,Ezhou University,Ezhou 436000,China)

During the development of Web Information System,the Multithread Technology and Ajax Technology were combined,and the mode of asynchronous programming was put forth,and which can solve the problem that client part can not real-time read the processing information of the server part effectively.Based on the application to“the on-line books management information systems”for a year,it was proved that the mode is reliable and effective.

mode of asynchronous programming;mode of synchronous programming;Ajax;multithread

TP 319

A

1004-1729(2012)01-0036-05

2011-11-04

葛中泽(1969-),男,湖北鄂州人,鄂州大学计算机系副教授.

猜你喜欢
服务器端线程邮件
基于James的院内邮件管理系统的实现
基于C#线程实验探究
来自朋友的邮件
Linux环境下基于Socket的数据传输软件设计
基于国产化环境的线程池模型研究与实现
CMailServer
一封邮件引发的梅赛德斯反弹
浅析异步通信层的架构在ASP.NET 程序中的应用
浅谈linux多线程协作
基于Qt的安全即时通讯软件服务器端设计