2011-07-11 28 views
0

假设我们有一个用AS3编写的在线应用程序,并作为SWF从服务器提供服务。第一个版本是V1.0。分发对现有SWF应用程序理论的更改

几个用户,一些在代理服务器后面,使用V1.0应用程序,现在客户端计算机和代理服务器上存在一个缓存副本。

V1.1已发布并放置在服务器上。所有用户都应该看到V1.1,但结果会有所不同,其中一些将被用于新副本,一些将在一段时间内接收其缓存副本,最后一些将被提供给代理服务器中的缓存副本。

我可以在V1.0的代码中检查服务器变量以查看它是否过期。但是如果它已经过时,AS3有没有办法强制它下载一个新的副本,或者将差异应用到自身中?

考虑到我无法访问代理服务器,也无法手动或自动清除缓存。

回答

1

我认为美国康涅狄格州的公民提供了一个简单的解决方案,虽然它引入了不必要的服务器负载明智的解决方案。

您可以使用citizen conn的方法,而不是时间戳,只需使用应用程序的版本标记即可。

main.swf?app_version=1.1 

另一种方法是使用DigitalD的方法强制刷新应用程序本身。

但是,因为你是在容器HTML页中使用此,容器可能会被缓存一样,所以你需要强制容器重装...

+0

这是我打的循环。我同意不必要的负载声明。 – Chris

2

SWF是缓存的唯一东西吗?如果是这样,那么你可以在页面加载时使用缓存。

请参考你的SWF,像这样:main.swf?timestamp = 7062956829这将导致代理服务器认为它是一个不同的文件,而不是提供缓存资源。

+0

+1。您可以手动跟踪版本,但从操作上讲,这将解决您的问题。 – fenomas

+0

这种方法的问题是你每次都强制重新加载swf,从而不必要地增加了服务器的负载。 – goliatone

2

您可能有一个包装器预加载器,每次应用程序启动时都会从服务器请求最新的版本号,然后加载最新版本的应用程序swf。

也有更新分发像http://treetide.com/swfcontrol/