克服VFPb-s编程缺点的一些方法
来源:优易学  2011-12-9 18:28:19   【优易学:中国教育考试门户网】   资料下载   IT书店

  纯b/s以“请求-响应”的方式进行工作,browse端只有不断向web server端请求新的网页,才能进行数据更新,因此,browse端具有被动性和滞后性,无法及时获取实时的数据及其改变情况,而且即使网页中仅有部分数据发生了变化,server端也必须重新发送整张网页,从而加重了服务器、网络的负担,降低了数据传输、应用的效率。如何克服这个b/s模式的最大缺陷,堵住那些说vf不能很好做b/s的臭嘴,就是下面要介绍的一些方法: 

  引入数据推送技术,实现browse中的网页自动粒状更新

  这种push技术就是由server端主动发送各种已经更新的数据给browse,不必发送完整的网页,browse端根据所接受到的数据对网页进行局部的更新。 

  为此需要在server端编制vf的数据推送程序,在browse端的网页嵌入数据接受程序。另外,如果考虑browse端的操作系统和浏览器具有的不确定性,也就是所谓的跨平台应用,数据就用XML封装。 

  1、推送数据的vf程序的流程

  a、在特定的端口侦听browse的连接请求(或者说检测用户是否请求登录);

  b、browse端请求建立连接(登录);

  c、建立browse连接列表(建立已经登录的用户列表);

  d、如browse断开连接,则从连接列表中删除该连接;

  e、server端更新数据的采集、XML封装;

  f、server推送数据到所有的在线的(已经连接的)browse端。 

  2、数据推送程序的基本规则(基于 Flash 的 web 嵌入式数据接受程序)

  a、发送数据以XML封装;

  b、发送数据以ASCII字符0作为结束标识;

  c、推送程序的监听端口应在 1024 以上;

  其中a、b规定了推送与接受之间的数据传输格式,c为Flash的安全措施。 

  3、数据接受程序的开发技术

  开发web嵌入式数据接受技术,主要有两种方法: Flash Application(以后简称FA) 和 Java Applet。使用 Flash 中 Action Script 开发的应用程序就是FA,与 Java Applet 相比,FA具有体积小(一般只有几KB)、插件普及率高、对browse端的要求低等的特点。 

  针对不同的操作系统和浏览器,Flash具有相应的插件,保证了FA能跨平台运行。Flash内建的 XMLSocket 对象实现了browse端的socket,允许基于FA的browse端数据接受程序与server端的数据推送程序之间建立基于socket的持续连接,并通过该连接进行双向的无限制的数据交换。 

  FA包含于 Flash 动画, Flash 动画通过或标记嵌入网页中,并随网页一起从server端下载到browse端的浏览器中。FA在browse浏览器中通过XMLSocket向server上的数据推送程序发出连接请求,建立起连接后,FA就能自动接收来自server的以XML格式封装的数据,并从中分析出所需的信息来刷新浏览器中的网页。 

  建立数据接收程序的基本步骤为:

  a、创建XMLSocket对象;

  b、设置XMLSocket对象的事件响应函数;

  c、调用XMLSocket对象的connect方法,与server建立连接;

  d、在XMLSocket对象的onXML事件响应函数中解析数据,更新浏览器中的网页。 

  4、asp/flash+vf+vf三层应用实例

  完整的例子太庞大,只说关键的东东了。 

  a、构造XML的数据封装格式

  vf 7.0 以后就支持XML,可以直接把表中数据导出为XML。由于我们考虑的是粒度更新,所以不把表或游标整个推送,简单些就直接用文本合并等方法,定义形如“<标记名>”的标记,封装推送的数据即可。例如:

  <标记名 属性1="属性1值" 属性2="属性2值"……/> 

  b、vf数据推送程序

  vf 的版本必须至少是6.0 SP3 以上,这样才支持com,建议使用8.0。

  当数据发生变化时,数据库事件就会产生,这时可以把变化的数据进行XML封装,并根据已经登录的用户列表,推送数据到brower端。 

  c、基于Flash的web嵌入式数据接收处理程序

  这里给出两个关键的事件响应函数(其它的就简单了,省略):

  // 连接函数

  on(release)

  {

  // 创建 XMLSocket

  listener = new XMLSocket();

  // 设置事件响应函数

  listener.onXML = listenerOnXML;

  // 连接数据推送程序

  listener.connect(主机,端口);

  }

  // 推送数据到达brower时的onXML事件响应函数

  function listenerOnXML(src)

  {

  // 注意:名称与值应该对应!

  属性1 = src.childNodes[0].attributes.属性1

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训