有谁知道如何在 GWT 中监控长时间运行的服务器端进程,而不是轮询服务器?我们需要在服务器上做一些耗时的、多步骤的、I/O 密集型的处理,在浏览器中显示这个处理的进度会很好。
Phil
问问题
1313 次
2 回答
3
这在 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() 返回。它可以返回,因为工作已完成或只是工作状态更新。以上将继续循环,直到设置了作业状态完成标志。
于 2009-01-03T23:16:16.863 回答
0
我认为这取决于您的流程,但如果您要做数据流之类的事情,您可以使用服务器推送(或彗星)技术。GWT 支持彗星实现。google GWT+Comet 或 GWT+COMET+Tomcat,我在“Google Web Toolkit Applications”一书(gwtapps.com)中读到了彗星和 gwt。
于 2009-01-03T19:53:39.987 回答