因为我的博客有人向我反应出现这样的问题,所以在网上搜了一下原因。
最近参与一个虚拟社区的项目,我制作了其中的农场游戏和视频会议应用模块,整个项目有多个Flex Project,包括主程、公共库、各个功能模块等。因为我参与的比较晚,对该项目的开发模式不是很了解,当然也因为我做的那两个应用独立性较强,所以我使用的独立的Flex Project来构建了那两个应用。
项目使用的是RSL(Runtime shared library)来链接外部库,所以我在做那两个应用的时候同样使用了RSL,初期一切正常,项目上线后,客服人员偶尔会收到客户的电话说打不开农场的情况,农场的位置出现“RSL Error 1 of 1”,在下方有一段文字“Error #2032: 流错误。 URL: http://www.xxx.com/XXX.swf/[[DYNAMIC]]/framework_3.2.0.3958.swf”。
出现这个问题的一段时间,我都比较困惑,当时自己找到了该问题的原因,并想到了一个解决方案。
先简单介绍一下RSL,RSL说白了是把多个Project创建类编译到多个swf中,这里面包括类库项目、Flex的框架库(framework_xxx.swf),这样就可以把这些swf中包含的类进行多个项目共享,在客户端加载的时候只需要加载一份就可以了(如果不使用RSL,所有用到的类会编译进一个swf中,如果有多个这样的swf,每个里面都包含一部分重复的类,增加了用户的下载量)。只有一个Project的情况下,使用RSL的效果并不明显,因为生成的swf对于所有用到的其他swf共享库都需要加载;而如果有多个Project,优势就会显现出来,第一个swf加载完成共享库后,之后的swf就不需要再加载了,可以提高访问速度。
使用RSL后,在生成的项目根目录下会有两个framework文件“framework_3.2.0.3958.swz”和“framework_3.2.0.3958.swf”(使用不同的Flex SDK,这两个framework文件后面的版本号会不同),客户端在访问主程时,会首先加载framework.swz文件,然后Flash Player把这个框架文件保存到Flash缓存中,如果framework.swz文件加载失败,则Flash Player会去找framework.swf文件,两个有一个加载成功,则项目就可以正确运行。
在出现“RSL Error”错误后,我尝试在自己的电脑上重现该错误,操作系统使用的是XP,当我把Flash Player缓存中的swz文件删掉,并新建了一个空的只读的swz文件,名字与刚删掉的swz文件同名,再次运行项目,果然出现了“RSL Error”,如下图,因为Flash Player向缓存中写入新的framework.swz时失败了,同时framework.swf也加载失败了。当时解决该问题的方法是手工向客户机的Flash Player缓存中保存framework.swz文件,至于该文件为什么在客户机的电脑上没有成功加载,没有多考虑(当时想或许是权限问题吧),只是在论坛上发个帖子看有没有人遇到类似的问题。
每个人都有懒惰的一面,我当时正是如此,如果仔细考虑一下,至少存在两个应该去深究的问题:1、整个项目项目都是使用的RSL,为什么只有我写的这两个应用出现RSL错误,我写的应用与整个项目有什么不同;2、我的应用在framework.swz加载失败后,framework.swf也加载失败,所以不能运行,整个项目在swz加载失败后,但可以运行,后来查看,IE缓存中确实存在framework.swf,那么这个可以肯定是整个项目文件加载的framework.swf。
一段时间,在论坛上的提问没有人确切给出这个问题的解决方案。再一次让我深究这个问题是帮助一个客户解决农场无法打开,也就是出现了“RSL Error”。 客户的计算机是Vista系统和IE8浏览器,我把RSL用到的framework.swz放到客户机的Flash缓存中时突然想到会不会是因为操作系统的原因而引起的呢?我们开发使用的都是XP系统。因为客户机的Flash缓存中没有swz文件,也就是之前的访问根本没有成功加载这个swz。
我在虚拟机上装了win7来做测试(win7与Vista内核一样),果然在win7下无法正常访问农场,Flash缓存中无swz文件。因为这个项目的其他模块都可以正常访问,所以我觉得framework.swf文件应该是成功加载了,但当我打开IE缓存时,发现IE缓存中竟然是framework.swz,颇为惊讶,如下图,因为之前一直以为这个swz框架文件会被保存到Flash的缓存中,不曾想在win7系统下会被放到IE缓存中(我的Flash Player版本是10.0.45),这就是为什么在Flash缓存中没有swz框架文件的原因。(如果framework.swz放到Flash缓存中,可以让多个域下的swf共享,而如果在IE缓存中,就只能是同一个域下的swf共享)。
发现这点无疑让我对RSL错误有更进一步了解,可能这是Flash Player的一个bug吧,也可能是微软给adobe做的手脚哈,当然这个暂时不能得到证实。
问题到这当然还不能结尾,因为我们还有疑问:framework.swz加载失败,还有framework.swf可以选择啊,为什么这个第二选择也失败了呢,我使用火狐浏览器HttpFox插件来查看客户端向服务器端的请求,终于找到了问题的所在,并且得出第二个问题 framework.swf加载失败与操作系统无关。问题的原因总结一句话“加载外部使用了RSL的swf文件,会造成该外部swf所指向的framework文件路径错误”。
使用火狐浏览,并打开HttpFox插件来查看Http请求,在加载完主程时,可以检测到客户端请求了framework.swz文件(如果swz无法加载则会加载framework.swf文件),当我禁用掉swz文件的加载后,进入到农场,发现农场重新加载framework.swz和framework.swf,但这两个文件都加载失败了,下面的两张图第一张是主程成功加载framework.swz,第二张显示农场加载的framework文件路径是错误的。
问题已经很清晰了,农场是一个单独的Project并使用了RSL,并且是使用Loader加载到主程中的,看上去好像这种方式改变了农场程序的URL路径,但农场用到的资源路径却没有改变。那么得出的结论应该是只改变了这个应用所用到的framework文件路径,这个路径只有在Flash Player使用,不知道有没有别的地方可以设置,这算不算又是一个Flash Player的bug呢?
有机会希望能进一步研究RSL。
PS:这篇文章之前忘了写解决方案了,目前我知道的有两种方案,一就是不使用RSL了,当然这样就享受不到RSL带来的好处;二是手工向客户端拷贝flashplayer缓存文件,此方式的缺陷是有时候我们无法操作客户机。对于第二种方式,flashplayer的缓存目录是:XP系统下是C:\Documents and Settings\用户名\Application Data\Adobe\Flash Player\AssetCache\H7UC3H3Y,VISTA和WIN7系统下是C:\Users\用户名\AppData\Roaming\Adobe\Flash Player\AssetCache\RAU4Y963,这两个路径的最后一个文件夹名是随机的,另外拷贝过去的swz文件也需注意,比如FlexSDK3.2在缓存中的swz文件名是1C04C61346A1FA3139A37D860ED92632AA13DECF.swz,这个文件需要从一个有flashplayer缓存的机子上拷贝到有问题的机子上去。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zlxluofeng/archive/2010/04/29/5543811.aspx
分享到:
相关推荐
1. OTIS-RSL串行协议概述: OTIS-RSL协议是一种远程串行通信协议,它允许电梯控制系统的主站与多个从站设备进行有效的数据交换。这种协议是Otis电梯公司推出的标准之一,被设计成支持电梯控制系统的远程诊断和操作...
标题中的“rsl.rar_RSL Matlab_attribute reduction_rsl”暗示了这是一个与RSL相关的MATLAB代码库,专注于属性约减技术。RSL通常代表Reduced Set Learning或Relevance Set Learning,这是一种在机器学习和数据挖掘...
OTIS-RSL串行协议是应用于奥地斯电梯系统中的一种远程串行接口协议标准。该协议在电梯控制系统通信体系结构中扮演关键角色,特别是在远程通信信道,如长电梯通道的通信中。 首先,我们来了解OSI(开放式互联参考...
一个简单的应用程序,用于演示 onsemi RSL10/RSL15 蓝牙低功耗设备的无线固件 (FOTA)。 RSL10 和 RSL15 是来自 onsemi 的超低功耗蓝牙低功耗无线微控制器。 FOTA 应用程序充当中央设备来扫描、连接固件映像并将其...
RSL(Resources Share List)类库是一个用于资源共享和管理的软件开发工具,广泛应用于软件工程领域,特别是那些需要高效协作和资源复用的项目。RSL库提供了丰富的API和功能,帮助开发者轻松实现数据共享、对象通信...
这些工具可能包括硬件测试平台、软件分析工具,如信号发生器、频谱分析仪、网络分析仪等,以及专门针对RSL10的配置和控制软件。通过RF Tool,工程师可以精确地测量RSL10在不同条件下的工作状态,确保其符合蓝牙标准...
【RSL10-SENSE-DB-GEVB_GERBER_hardware_rsl10_castcpf】这个压缩包文件主要涉及的是基于RSL10芯片的传感器开发板(RSL10-SENSE-DB)的硬件设计资料,其中包含了GERBER文件。RSL10是一款由ON Semiconductor公司生产...
OTIS-RSL远程串行接口协议标准大全.PDF
OTIS-RSL串行协议-中文版。 文档描述了远程串行接口协议标准在奥地斯电梯系统中的应用,该文档在使 用远程串行接口协议标准进行通讯的建模过程提供了参考。对于多个模块的标准 接口定义有参考作用,但是获取不了...
1. **RSL15_documentation.htm**:这可能是一个HTML格式的主文档,概述了RSL15芯片的基本信息,包括其规格、特性、功能以及可能的应用场景。用户可以通过此文件快速了解RSL15芯片的核心功能和优势。 2. **RSL15_...
Flex RSL(Runtime Shared Libraries)是Adobe Flex框架中的一种机制,用于优化应用程序的加载和运行时性能。RSLs是一组预编译的库,包含了常见的Flex组件和类,允许多个应用程序共享这些资源,减少网络传输的数据量...
RSL5K_V19.00_Core 用于程序开发,编程。
The RSL10 Sensor Beacon application allows the monitoring of various sensors connected to energy harvesting based RSL10 development platforms. It supports all available On Semiconductor Beacon ...
AB PLC RSL5KV11_V12_13-17rar,AB PLC RSL5KV11_V12_13-17
在距离检测方面,RSL10能够应对各种困难的环境和物体,包括黑色泡沫、黑色橡胶、金属材质以及彩色包装材料等。它能够检测到最小变化量为0.5毫米的距离变化,并且具有直观的输出指示灯以及带角度的4位数显,方便用户...
施耐德继电器Zelio Relay RSL薄片式pdf,施耐德继电器Zelio Relay RSL薄片式:RSL 薄片式继电器拥有紧凑的外观和模块化设计的优点:纤薄的宽度(6mm)在控制柜导轨上安装时节省了空间。
1. **兼容性**:RSL协议支持多种不同的接口类型,如RS-485等,确保了与不同设备之间的互操作性。 2. **安全性**:通过加密技术确保数据传输过程中的安全性。 3. **可靠性**:采用错误检测机制,如CRC校验,以确保...
在讨论DW1000基于的双向测距(TWR)方案中误差来源时,文档APS011提供了关于影响测距精度的多个因素的深入分析。本内容将根据提供的文件信息,详细阐述这些误差来源的知识点。 ### 1. DW1000振荡器和石英晶体 文档...
1. 数据获取:脚本首先会从MT5平台获取历史和实时的证券价格数据,尤其是计算RSL值所需的数据。 2. RSL计算:根据价格变化计算RSL,反映证券的相对强弱。 3. 平滑处理:应用某种平滑方法(如移动平均)来减少噪声并...
安森美半导体(ON Semiconductor)推出RSL10传感器开发套件,旨在为工程团队提供一个具备智能传感器...还含1个超低噪声数字麦克风,及1个用户可编程的RGB LED、3个可编程按钮开关和64 kbit EEPROM。 Bosch Sensortec