サーバーをポーリングする以外に、GWTで長時間実行されているサーバー側のプロセスを監視する方法を知っている人はいますか? サーバー上で、時間のかかる複数ステップの I/O バウンド処理を実行する必要があります。この処理の進行状況をブラウザーに表示すると便利です。
2 に答える
これは、GWT で扱うのはかなり簡単です。
長時間実行されるプロセスは、エントリ ポイントがある場合は GWT RPC 呼び出しによってトリガーされます。エントリ ポイントがない場合は、手動で開始する必要があります。
GWT RPC 呼び出しは非同期であるため、すぐに戻る必要がないことに注意してください。のような RPC 呼び出しが必要ですcheckStatus()
。したがって、次のようなことができます。
public class JobStatus {
private boolean done;
// other info
// ...
}
public class JobStatusCallback<JobStatus> extends AsyncCallback {
public final void onSuccess(JobStatus result) {
if (result.isDone()) {
done();
} else {
checkAgain();
}
}
public final void onFailure(Throwable caught) {
error(caught);
checkAgain();
}
public void done() { // override
}
public void checkAgain() {
service.checkStatus(this);
}
public void error(Thorwable t) { // override
}
});
そしてあなたのRPCサービスで:
void checkStatus(AsyncCallback<JobStatus> callback);
サーバーは、checkStatus() から戻るのに (妥当な範囲内で) 好きなだけ時間がかかる場合があります。仕事が完了したため、または単に仕事のステータスが更新されたために戻る可能性があります。上記は、ジョブステータス完了フラグが設定されるまでループし続けます。
プロセスにもよると思いますが、データ ストリーミングのようなことを行う場合は、サーバー プッシュ (またはコメット) テクニックを使用できます。GWT はコメットの実装をサポートしています。Google GWT+Comet、または GWT+COMET+Tomcat については、"Google Web Toolkit Applications" Book(gwtapps.com) で comet と gwt について読みました。