![]() ![]() |
|
克服VFPb-s编程缺点的一些方法 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/10/22 21:40:31 文章录入:杜斌 责任编辑:杜斌 | |
|
|
纯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 相关链接: 更多信息请访问:计算机等级考试站 计算机等级考试在线题库 计算机等级考试论坛 |
|
![]() ![]() |