2009-01-03 57 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的內容。