代码之家  ›  专栏  ›  技术社区  ›  Ittai

如何知道GWT中的应用程序版本发生了变化?

  •  2
  • Ittai  · 技术社区  · 16 年前

    我有一个用例,我的GWT应用程序在客户端浏览器上运行,我停止tomcat并更新相关的WAR。



    1. 在我的应用程序中确定GWT-RPC失败的原因是404,因此应该重新加载,但我不确定如何确定这一点。当然,我不能在每一个GWT-RPC上重新加载,因为服务器可能只是无缘无故地停机,并且将在一两秒钟内毫无问题地备份。
    2. 出于某种原因moduleName.nocache.js 文件被缓存,所以即使我手动刷新,我也可以看到服务器上的404请求,因为应用程序正在寻找一个不存在的资源(以前的版本),一旦我删除浏览器的缓存,这个问题就解决了。有人知道为什么要缓存这个吗?在这方面,我没有对服务器设置进行任何更改。


    1似乎没有直接的GWT方法可以做到这一点,所以我决定,当一个模块加载时,它会收到一个 module version 如果有不匹配,它会重新加载页面。用于查询模块版本的GWT-RPC是常量,出于兼容性原因不会更改。这样,即使所有其他GWT-RPC方法都更改了模块,也可以保证此方法有效。
    2似乎,由于BalusC的建议,这个文件只被缓存了5-10分钟,这就是为什么我在这个领域看到了不确定的行为。我已经打开了 another question 谢谢,
    伊泰

    3 回复  |  直到 9 年前
        1
  •  1
  •   BalusC    16 年前

    HTTP不支持数据推送。您需要使用特定于web服务器的技术。在Tomcat中,这是 Comet . 然而,这是一个很大的工作。我更推荐使用JavaScript/Ajax让客户机在一定的时间间隔内轮询版本更改。例如,每五分钟左右。如果结果表明版本发生了更改。然后您可以让JavaScript通过 window.location.reload .

    Cache-Control: no-cache, no-store, must-revalidate
    Pragma: no-cache
    Expires: 0
    
        2
  •  0
  •   pathed    16 年前

    当用户启动应用程序时,可以将应用程序版本放入cookie中,并且在每次rpc调用时检查cookie(如果用户有最新版本),如果没有抛出异常。

        3
  •  0
  •   Community Mohan Dere    9 年前

    如果应用程序经常调用服务器,则可以在找不到正确的策略时发出新版本的信号。看看我的答案 question