远程教育课件实时传播系统的实现
日期:2006-11-15 荐:
引言:
随着现代信息技术的不断发展,网络在各项各业中的应用也不断广泛起来,作为软件技术开发人员, 不但要掌握一门编程技术,还要有着非常清晰的头脑,对实现应用中所遇到的问题作仔细的分析,要不断的寻找最简洁高效的方法完成应用的设计与开发。
网络应用开发的技巧性及综合性都是很强的,许多看似非常复杂、技术含量极高、涉及面广的需求应用,通过仔细分解、剖析,其实都可以用一般的技术实现。下面,我以一个简单的网络应用为例,给大家展示网络应用程序开发中的技巧。
应用项目名称:网络远程实时课件传播系统。
一、应用项目简介:
在现代的大多数学校里面,都已经实现了电子化教育体系,都具有了专门播放课件的电脑、投影仪、电子白板等现代教学设备,老师通过多媒体课件及电子白板等实现非常丰富多彩的教学,大大提高教学的质量。本应用主要实现一个主课堂及多个分课堂的同步教学,也就是只需要主课堂一个教师在讲课,其它多个分课堂都可以看到教师讲课的课件内容、教师的声音、甚至教师的图像等,当然、教师也可以看到各个分课堂的情况,这样可以简单达到同时对很多课堂的授课。
在此,我主要实现的是课件传播的部份,声音及主分课堂图像采集可以通过相应的其它的应用软件来实现。现在很多开展远程教育的学校都是采用专线形式,价格特别昂贵,因为要传输非常大的图像等多媒体数据,所以一般的网络速度满足不了它们的需求。
本系统中课件采用网页形式制作,对网络的传播速率几乎可以不考虑,因此、可以满足现在很多初步开展远程教育的学校通过公众网络(163、169)等价格低廉的网络实现以前必须通过专线才能实现的应用。
二、项目需求及设计
需求分析
老师把课件做成网页的形式存放在一个中心服务器上,网页可以是单纯的HTML页面,也可以是带数据库查询的ASP程序。在主课堂的浏览器上,教师只要点击相应的课件页面,其它分课堂的浏览器也会自动转到相应的页面,显示相应页面的课件的内容,达到主分课堂课件的实时传播。
问题剖析及设计思路
从以上的需求中,我们可以看出此应用将涉及一个主控程序负责采集主课堂的显示数据(在这里就只是一个非常简单的URL)、及一个定时器负责把采集的内容发送给分课堂,然后就是大量的网页课件。
在这个应用中,我们要着重解决以下几个方面的问题:
1、实现所有课堂的数据同步,也就是访问地址一致。
要使所有课堂访问的数据同步,必须使用一个公用数据,记录当前主课堂的正访问的页面课件地址,这个公用数据不用我说大家一定知道怎样实现了,你可以通过存放到数据库中,也可存放到文本文件中,但是为了让系统的效率达到最优化,在这里我们采用ASP中的,Application变量(也就是全局内存变量)来记录当前主课堂的网页课件地址(URL)。
2、完成主控程序,功能实现当主课堂访问的课件内容改变时,也就是访问地址改变时,把发生的改变急时的传送到服务器中。
如果是用VB或者C是等语言来编写,大家可能很容易知道怎样完成,但是那样也会涉及到很多的基础类、定时器等。而且还需要主课堂运行一个专门的程序,非常不方便。在这里我们通过ASP实现,主课堂只要用相应的帐号及密码登录系统就可以啦。
首先,由于要能方便跟踪当前页面课件的地址,因此我们要把课件显示页面及控制程序都放在同时一个框架中,因此我们使用了〈frameset〉。程序的主框架Main.asp)包括如下的代码:
〈frameset rows=“0,*“〉
〈frame name=“topFrame“ src=“online.asp“ scrolling=“yes“〉
〈frame name=“mainFrame“ src=“login.asp“〉
〈noframes〉
topFrame框架运行主控程序OnLine.asp,实现主课堂网页地址的的采集及课堂网页地址的显示。MainFrame框架用于运行登录、显示课件的内容等。
其次,由于要不断的监视主课堂的访问链接是否改变,因此我们需要一个定时器,定时运行负责把已经改变的地址急时地写入服务器全局Application变量中。在这里我们可以通过HTML的〈meta http-equiv=“refresh“ content=“1“〉来实现。
再次,程序要取得主课堂浏览页面的地址,可以通过客户端脚本代码:parent.frames[1].location.href取得,把这个值传给服务器端可以通过Post或者Get两面三刀种方式来实现,这里我们选择Get方式,如下:
parent.frames[0].location.href=“online.asp?currenturl=“ parent.frames[1].location.href;
这样,强制重新执行Online.asp并在其头中包含了Request.QueryString (“currenturl“)的值,也就是当前主框架中所访问的课件地址值。取得这个值后把它写入全局量变中,我不说大家也一定知道怎么做啦!
3、分课堂中浏览器自动访问服务器中的全局Application变量中地址中的页面。
这个过程可通过两种方式,一种是由服务器端主动给各个分课堂发送数据,另外一种是由分课堂不断的主动到服务器端取得全局Application变量值,并把本地的浏览页面主动转入到相应的地址中,达到与主课堂的同步,在这里我们采用第二种方式来实现。
当然、这个部份可以通过专门的另外一个程序来实现,但是为了便与管理,我们把它一起封装到OnLine.asp中。定时器跟前面说的一样,通过〈meta http-equiv=“refresh“ content=“1“〉来实现,首先取得服务器中的Application值,然后通过以下的客户端脚本语句就可以改变本地(分课堂)浏览器的URL值,自动访问相应的课件页面。
parent.frames[1].location.href=’〈%=Application.Contents(“CurrentURL“)%〉’;
到此,我们的整个应用设计就有了非常清晰的概念啦。下面让我们来看一看此应用的大致技术构架图。
网络远程教育实时课件传播系统框图
三、详细程序代码
* Main.asp
主要代码如下:
〈%
Application.Contents(“HaveChange“)=false %〉
〈html〉
〈head〉
〈title〉远程教育课件实时传播系统〈/title〉
〈meta http-equiv=“Content-Type“ content=“text/html; charset=gb2312“〉
〈/head〉
〈frameset rows=“0,*“〉
〈frame name=“topFrame“ src=“online.asp“ scrolling=“yes“〉
〈frame name=“mainFrame“ src=“login.asp“〉
〈noframes〉
〈body bgcolor=“steelblue“ text=“#000000“〉
〈/body〉
〈/noframes〉
〈/frameset〉
〈/html〉
整个程序框架由两个部份组成,名为topFrame的框架里面主要是主控程序OnLine.asp,实现主课堂网页地址的的采集及课堂网页地址的显示。当然,名为mainFrame在此为登录程序,登录后可以直接转到相应的课件中,所有的课件内容都将在框架mainFrame中显示。
* Online.asp( 系统主控程序)
源代码如下:
〈html〉
〈head〉
〈%if Session(“UserName“)=“webmaster“ then%〉
〈meta http-equiv=“refresh“ content=“2“〉〈!--///注释:主课堂的定时器--〉
〈%else%〉
〈meta http-equiv=“refresh“ content=“1“〉〈!--///注释:分课堂的定时器,分课堂的刷新一般要慢于主课堂--〉
〈%end if%〉
〈title〉当前在线〈/title〉
〈/head〉
〈body leftmargin=0 topmargin=0 rightmargin=0 style=“position:width:0; height:0;“ bgcolor=“#ffffff“〉
〈%Response.Buffer = True
Response.Expires=0
if Session(“UserName“)=“Webmaster“ then ’///////注释:程序在主课堂运行的时
valCurrentUrl=Request.QueryString (“currenturl“) ’////////注释:取得传送来的Get变量currenturl值
if Application.Contents(“CurrentURL“)〈〉valCurrentUrl then Application.Contents(“HaveChange“)=true
’注释:把所传的值以服务器中的全局变量作对比,假如主课堂地址已经改变则,通过Application.Contents(“HaveChange“)提示,地址已经改变!
Application.Contents(“CurrentURL“)=valCurrentUrl ’//////////注释:改变服务器全局变量的值.
%〉〈script〉
if(parent.frames[1].location.href!==’〈%=valCurrentUrl%〉’)
parent.frames[0].location.href=“online.asp?currenturl=“ parent.frames[1].location.href;//////注释:重复运行
〈/script〉
〈%
else’//////////注释:程序在分课堂运行
if Application.Contents(“HaveChange“)=true then’//////////注释:如果发现主课堂游览地址已经改变则,跟着执行以下语句。
%〉
〈script〉
parent.frames[1].location.href=’〈%=Application.Contents(“CurrentURL“)%〉’;〈/script〉〈!--///注释:直接把分课堂的浏览页面转入到全局变量中--〉
〈%
Application.Contents(“HaveChange“)=false
end if
end if
%〉
〈/body〉
〈html〉
在主控程序中,主要根据用户权限的执行两个方面功能:一个方面是不断监视本地mainFrame中的页面地址,并把地址的改变直接放写入服务器全局变量Application(“CurrentURL“)中。另一个方面是不断地读取服务器全局变量Application(“CurrentURL“)中的值,并检查全局变量的内容是否已经改变,若改变的话就把Application(“CurrentURL“)中的值直接写入本地浏览器中,强制要求本地浏览器与主课堂显示一致。
* Login.asp
主要代码如下:
〈%@ Language=VBScript %〉
〈HTML〉
〈HEAD〉
〈META NAME=“GENERATOR“ Content=“Microsoft Visual Studio 6.0“〉
〈/HEAD〉
〈BODY〉
〈%
if Request.ServerVariables(“REQUEST_METHOD“)〈〉“GET“ then
UserName=Request.Form(“UserName“)
Password=Request.Form(“Password“)
if UserName=“webmaster“ and Password=“caishiyou“ then
Session(“UserName“)=“Webmaster“
Application.Contents(“CurrentURL“)=“index.htm“’ /////////注释:全局变量中记录课件首页
else
Session(“UserName“)=“guest“
end if
Response.Write(“〈script〉location.href=’index.htm’;〈/script〉“)’///////注释:转入课件首页
end if
%〉
〈form action=“login.asp“ method=“post“〉
〈P〉 〈/P〉
请输入用户名:〈input type=text size=10 name=“UserName“〉〈br〉
请输入密码:〈input type=password size=10 name=“Password“〉〈br〉
〈input type=submit value=“提交“〉
〈/form〉
〈/BODY〉
〈/HTML〉
Login.asp实现用户的登录,主要判断主分课堂用户,并设置始变量的值。
到此,整个系统已经完成,很简洁吧,不过他的所实现的功能对于类似远程教育等应用中可是非常强大的哦!
四、系统使用介绍
1、平台需求
服务器:Window NT4.0/Window 2000 IIS4.0/IIS5.0
客户端:页面浏览器Internet Explorer 5.0或更高版本的产品(为了支持非常丰富多彩的多媒体课件)
2、页面课件设计需求
所有课件都可以做成浏览器支持的文件格式如:HTML,ASP,GIF,JPG,Flash等,当然,在页面中有客户端交互的动作设置,如在一个文本框中录数据,或者是钳在flash画面中的交互致动作等将不能从主课堂传到分课堂中。
3、系统安装设置
把以下三个程序文件: main.asp、login.asp、online.asp存放到拥有要传播的课件系统中,通过运行main.asp即可进入,(注意:课件首页名字为index.htm,你也可以随便修改)。
五、系统效率及总结
* 时实传播速度:由于本系统中所有课堂(主课堂、分课堂)的电脑都是从同一个地方访问数据,因此各个课堂的数据访问情况将直接受到相应地网络速度的影响。系统中主控程序部分由于只传送处理少量的数据资料,因此,一般的拨号上网都可以不考虑此部份的对速度影响。最主要的是对课件页面的访问,这起决于对网络本身与服务器端的链接速度。原则上说系统的反映速度将与不通过系统直接访问网页的速度相同。
* 同步教学:由于我们只能把主课堂的浏览地址的改变反映到服务器,其它分课堂也只是跟踪服务器端的地址改变情况,对主课堂的其它动作(客户端操作)不能跟踪。因此,要求表示课件的所有内容都要分成单独的页面(包括表达所有的交互动作)。
* 移植及扩充:本系统中核心语句就只有几条语句,除此语句外的其它部份都可以作适当的修改并移植到有相似需求的应用中,并可以对功能作无限制的扩充。(2003-1-10)
标签: