纯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
责任编辑:小草