博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

tomqq & security

网络安全/IDS/SSL-VPN/WEB技术/java/
  tomqq.cublog.cn

关于作者
姓名:tomqq
职业:挨踢的
位置:成都
个人介绍:2004年毕业于四川大学计算机应用专业,硕士学历,毕业后一直从事IDS和SSL-VPN的研发至今。Email:hekong@gmail.com

|| << >> ||
我的分类


设计支持多os的ssl-vpn客户端(六)——如何控制时序

设计支持多os的ssl-vpn客户端(六)
——如何控制时序
Tomqq 6/23/2008

    Vpn客户端登录是有自己的时序的,比如什么时间登录,什么时间加载js文件,什么时间加载插件,加载插件之前需要加载哪些js,等等,更重要的是还有组件通信状态的时序。要用php+js+applet控制好可不是容易的事。用firedebug或者safira或者ie的页面调试工具,可以看出页面各个元素的大致加载时序,这个可以作为最初的参考,但是各个浏览器的加载顺序和习惯不能保证是一样的,特别是加载后再刷新的时候,很多页面代码有一些是从缓存加载的,这样子就有可能造成比如这种错误:插件加载以后开始通信并调用js代码,但是js代码还没有被加载,这时候js就会出错。Js一旦出错,后面的js就全成了僵尸了,这次加载就失败了;还有某些浏览器加载js和applet的通信桥,就是jsobject的时候,多次刷新会出现该对象加载失败的情况,会造成jvm的崩溃,种种问题,都告诉我们:必须对页面逻辑时序用一种不依赖于浏览器本身的方式来加以控制,特别是对某些特定消息需要严格控制先后顺序。

方法一:采用状态机来控制vpn自身时序
页面插件功能局限为通信协议转换,vpn逻辑(host check,AACR,组件下载)实现了一个本地的状态机,这样子界面只需要发送消息即可,不必控制事物之间的时序,状态机会处理每一个输入并保证每一个消息都处于状态机之中的某个状态;

方法二:页面采用防刷新机制,防止多次刷新造成页面组件加载异常
这个使用php+session来实现的,另外jsobject加载的时候要加载成为jvm的全局变量,这样子每次刷新就不会造成重新加载;、

方法三:采用applet->js->applet方式,防止js和applet加载不同步
Js加载好了以后,会调用applet的一些方法发消息,但是经常会遇见这种情况:applet还在执行某些初始化过程,这个时候某些方法还没有准备好,js又不可能去等待,这就造成了js出错。解决的方法是:用applet加载好了以后,再调用该js方法,该方法再回调applet的方法,就可以避免这一问题的出现。

方法四:把所有的js代码放在页面的最顶部
通常,浏览器都是采用从上倒下的顺序加载的,这个方法可以尽量减少这个因素造成的干扰。

【全文完】

交流可以发邮件:hekong@gmail.com

发表于: 2008-06-23,修改于: 2008-06-23 17:24,已浏览65次,有评论0条 推荐 投诉


网友评论
 发表评论