0

假设我们有一个用 AS3 编写的在线应用程序,并从服务器作为 SWF 提供。第一个推出的版本是V1.0。

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

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

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

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

4

3 回答 3

2

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

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

于 2011-07-11T23:58:41.643 回答
2

您可能有一个 wrapper-preloader,它在每次应用程序启动时从服务器请求最新版本号,然后加载最新版本的应用程序 swf。

更新分发也有明智的解决方案,例如http://treetide.com/swfcontrol/

于 2011-07-12T00:16:22.737 回答
1

我认为citizen conn 提供了一个简单的解决方案,尽管它引入了不必要的服务器负载。

您可以使用citizen conn 的方法,但不要使用时间戳,而是使用应用程序的版本标签。

main.swf?app_version=1.1

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

但是,由于您在容器 html 页面中使用它,因此容器也可能被缓存,因此您需要强制重新加载容器...

于 2011-07-13T09:18:13.670 回答