除了轮询服务器之外,有谁知道如何监控GWT中长时间运行的服务器端进程?我们需要在服务器上执行一些耗时的,多步骤的I / O绑定处理,并且在浏览器中显示此处理的进度会很不错。
答案 0 :(得分:3)
这在GWT中相当容易处理。
长时间运行的进程由GWT RPC调用触发,在这种情况下,您有入口点,或者不是,在这种情况下,您需要手动启动它。
请记住,GWT RPC调用是异步的,因此它们不需要立即返回。您需要像checkStatus()
这样的RPC调用。所以你可以做以下事情:
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()返回。它可以返回,因为作业已完成或只是作业状态更新。以上将继续循环,直到设置了作业状态完成标志。
答案 1 :(得分:0)
我认为这取决于您的流程,但如果您要执行类似数据流的操作,您可以使用Server Push(或Comet)技术.GWT支持Comet实现。 google GWT + Comet,或GWT + COMET + Tomcat,我在“Google Web Toolkit Applications”一书(gwtapps.com)中读到了关于comet和gwt的内容。