我有一个用例,我的GWT应用程序在客户端浏览器上运行,我停止了我的tomcat并更新了相关的WAR。
我想要发生的是,一旦我加载tomcat,每个现有客户端都将自动重新加载,以便他们使用正确版本的应用程序。
目前我面临两个问题:
修改
1.似乎没有GWT直接这样做的方式所以我决定的是,当一个模块加载它时会收到一个module version
,一个Double,如果一个GWT-RPC失败,模块会查询服务器它的当前module version
如果不匹配则会重新加载页面。用于查询模块版本的GWT-RPC是常量,并且出于兼容性原因不会更改。这样,即使所有其他GWT-RPC方法都改变了模块,也保证该方法有效
2.由于BalusC的建议,似乎文件只缓存了5-10分钟,这就是为什么我在这个领域看到了非确定性的行为。我已经打开another question关于如何在单个js文件上设置标头,因为我在某处读到它与容器有关而不是GWT。
谢谢,
以太
答案 0 :(得分:1)
HTTP不支持推送数据。您需要使用特定于Web服务器的技术。在Tomcat中,那是Comet。然而,这是很多工作。我宁愿建议使用JavaScript / Ajax让客户端以特定的时间间隔轮询版本更改。例如。每隔五分钟左右。如果结果表明版本发生了变化。然后你可以让JavaScript按window.location.reload
重新加载页面。
关于您的缓存问题,请验证相关请求文件的响应标头。它应该至少匹配以下标题:
Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Expires: 0
答案 1 :(得分:0)
当用户启动你的应用程序时,你可以将app-version放在cookie中;如果用户有最新版本,你可以在每次rpc调用时检查cookie,如果没有抛出异常。
答案 2 :(得分:0)
如果您的应用程序经常呼叫服务器,您可以在找不到合适的策略时发出新版本的信号。检查我对此question的答案。