2

GWTアプリケーションがクライアントブラウザーで実行されているユースケースがあり、Tomcatを停止して、関連するWARを更新します。
私がしたいのは、Tomcatをロードすると、既存のすべてのクライアントが自動的にリロードされるため、正しいバージョンのアプリケーションが使用されるようになることです。

現在、私は2つの問題に直面しています。

  1. 現在ロードされているアプリケーションに、廃止されてリロードする必要があることを通知する方法がわかりません。GWT-RPCの失敗の理由が404であるため、リロードする必要があることをアプリで何らかの方法で特定することを考えていますが、これをどのように特定できるかわかりません。もちろん、すべてのGWT-RPCでリロードすることはできません。サーバーが理由もなくダウンしている可能性があり、問題なく1〜2秒でバックアップされるためです。
  2. 何らかの理由で、moduleName.nocache.jsファイルがキャッシュされるため、手動で更新しても、アプリが存在しないリソース(以前のバージョン)を探しているため、キャッシュを削除すると、サーバーで404リクエストが表示されます。ブラウザのこれは解決されます。これがキャッシュされる理由を誰かが知っていますか?この点に関して、私はサーバー設定に何も変更していません。

編集:
1。これを行うGWTの簡単な方法はないようです。そのため、モジュールが読み込まれるとmodule version、Doubleを受け取り、GWT-RPCが失敗した場合、モジュールはサーバーに現在module versionの不一致がある場合は、ページをリロードします。モジュールバージョンのクエリに使用されるGWT-RPCは一定であり、互換性の理由から変更されません。このように、他のすべてのGWT-RPCメソッドがモジュールを変更した場合でも、このメソッドが有効であることが保証されます。
2. BalusCの提案のおかげで、ファイルは5〜10分間だけキャッシュされるようです。そのため、この領域で非決定論的な動作が見られます。別の質問を開きましたGWTではなくコンテナに関連していることをどこかで読んだときに、単一のjsファイルにヘッダーを設定する方法について説明しました。ありがとう、
イッタイ

4

3 に答える 3

1

HTTPはデータのプッシュをサポートしていません。Webサーバー固有の手法を使用する必要があります。Tomcatでは、それはCometです。ただし、これは大変な作業です。JavaScript / Ajaxを使用して、クライアントが特定の間隔でバージョン変更をポーリングできるようにすることをお勧めします。たとえば、5分ごとかそこら。結果がバージョンの変更を示している場合。次に、JavaScriptにページをリロードさせることができますwindow.location.reload

キャッシュの問題については、問題の要求されたファイルの応答ヘッダーを確認してください。少なくとも次のヘッダーと一致する必要があります。

キャッシュ制御:キャッシュなし、ストアなし、再検証する必要があります
プラグマ:キャッシュなし
有効期限:0
于 2010-08-19T14:49:49.297 に答える
0

アプリケーションがサーバーを頻繁に呼び出している場合は、適切なポリシーが見つからないときに新しいバージョンを通知できます。この質問に対する私の答えを確認してください。

于 2012-08-25T05:18:54.077 に答える
0

ユーザーがアプリを起動したときにアプリのバージョンをCookieに入れることができます。また、例外をスローしない場合は、ユーザーが最新バージョンを使用しているかどうかをrpc-callごとに確認します。

于 2010-08-19T17:59:53.437 に答える