2014-03-19 26 views
0

基於apache CXF的soap web服務客戶端使用的web服務也具有心跳服務。如果客戶端在10秒內沒有向Web服務發送任何請求,則客戶端應該向服務器發送心跳請求。我的問題是我們如何計算這個閒置的10秒。如何計算Web服務客戶端空閒時間

回答

0

我認爲這取決於你如何實現客戶端。

這裏是我的建議:

您可設置標誌送給客戶,如果客戶端調用該服務可以設置該標誌是真實的,和你有一個計時器,檢查標誌,並復位標誌每10秒鐘一次。一旦標誌在時間重置之前是假的,客戶端就可以向心跳服務發送一個ping。

1

如果你有一個單獨的類,你打電話給web服務,我認爲你可以實現如下。

KPHeartBeat.java

public class KPHearBeat { 

    private static Timer timer; 
    static{ 
     timer = new Timer(); 
    } 

    public String callWebService(int input){ 

     timer.cancel(); 
     System.out.println("calling my webService"); 
     startTimer(); 
     System.out.println("Starting timer"); 
     return "Done"; 
    } 

    private void startTimer() { 
     timer.purge(); 
     timer = new Timer(); 
     timer.scheduleAtFixedRate(new TimerTask() { 

      @Override 
      public void run() { 

       System.out.println("Calling Heart Beat service"); 

      } 
     }, 10000, 10000); 
    } 

} 

JUNIT類;

public class KPTestTimer { 

    @Test 
    public void testTimer(){ 

     KPHearBeat kp = new KPHearBeat(); 

     kp.callWebService(1); 
     try { 
      Thread.currentThread().sleep(15000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     kp.callWebService(2); 
     try { 
      Thread.currentThread().sleep(8000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     kp.callWebService(3); 
     try { 
      Thread.currentThread().sleep(25000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 
如果你有多個方法和你在代碼中的不同地方調用它

那麼我認爲你可以使用單獨的類這將處理定時器。攔截器不會真的幫你。