2009-01-03 89 views
1

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

回答

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()。它可以返回,因为作业已完成或仅通过作业状态更新。上述操作将继续循环直到完成作业状态标志。

+0

感谢您的回答。现在,我看到它,这似乎很明显:) – Phil 2009-01-04 02:46:35

0

我认为这取决于你的过程,但如果你打算做类似数据流的事情,你可以使用Server Push(或Comet)技术.GWT支持Comet实现。 谷歌GWT + Comet或GWT + COMET + Tomcat,我在“Google Web Toolkit应用程序”书(gwtapps.com)中阅读了关于comet和gwt的内容。