2014-05-05 122 views
3

现在我有一个问题:最佳实践,以更新客户端(GWT)Web应用程序

  1. 用户打开Web应用程序页面,获取使用Javascript(ModuleName.nocache.js); 然后我更新客户端(roc请求,查看等​​)。
  2. 用户没有关闭浏览器中的web应用程序选项卡,没有更新页面。他在某处点击并随机爆炸。例如,RPC不起作用,servlet在任何地方移动,有很多错误或者没有。

现在我想实现场景:
用户必须具有cookie属性和Web应用程序版本。
根据要求我看到它,并在回应迫使他更新页面(不知道如何)。
如果用户的请求无法传送gwt强迫他更新页面(不知道如何)。

但我认为必须有一个最佳实践方式来解决这个问题。

回答

5

Catch IncompatibleRemoteServiceException s和StatusCodeException s在您的AsynCallback s。第一个告诉你客户端代码与服务器端代码不兼容;第二个可以告诉你,那里不再有一个RPC servlet(查找404状态码)。 然后,您可以向用户显示一条消息,提示他重新加载页面(例如Google Groups所做的)。

这就是说,有缓解这种如果变化相对较小的一些方法:你可以保持身边服务器端系列化的政策文件,以便服务器可以处理来自不同的客户端版本请求。但是这些改变必须以某种方式向后兼容。
然后,您可以在服务器端检测客户端版本(使用最新的序列化策略文件列表并检查客户端是使用其中一个还是较旧的客户端;或使用请求标头或cookie)并包括响应中的一些内容(响应头或cookie)告诉它有一个新版本。
或者你可以定期轮询服务器(显然是而不是使用RPC虽然)的最新版本的应用程序。

+0

谢谢,它的工作原理。 – jNess

0

另一种方法:

  1. 如果它是空的(如果不是,进入下一步骤),保存com.google.gwt.core.client.GWT.getPermutationStrongName();LocalStorage或在您的Cookies并完成流程。
  2. 当你的应用程序加载时,再次获取permutationStrongName,并检查保存的是不同的。
  3. 如果向服务器请求一切的力量(如果你想/需要“休息”异步过程,你可以使用GQuery - promises)。然后,在您的LocalStorageCookies中替换新的gwt的排列id。

你可以这样做,总是你的应用程序被加载(不是什么大不了的)。现在您可以在服务器上的版本发生变化时使用。

+0

谢谢,这是有用的东西 – jNess

+0

高兴地帮助! – apanizo