1

有谁知道如何在 GWT 中监控长时间运行的服务器端进程,而不是轮询服务器?我们需要在服务器上做一些耗时的、多步骤的、I/O 密集型的处理,在浏览器中显示这个处理的进度会很好。

4

2 回答 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 回答