2014-11-13 180 views
2

軟件堆棧:大氣WASYNC客戶端(重新連接到關閉服務器)

  • 的Tomcat v7.0.54

  • 大氣服務器V2.2.3(@ManagedService註解類)

  • 大氣Wasync客戶端v1.4.0

我們有兩個服務器實例其中一個使用@ManagedService註釋提供端點,另一個使用Wasync lib作爲客戶端連接到它。 服務器客戶端需要連接在任何時候都是持久的,並且不同的用例使得這有點具有挑戰性。

我們的主要問題用例有:

  1. 連接丟棄,因爲網絡中斷或服務器已關閉。
  2. 客戶端服務器已啓動,但服務器端點尚未啓動。

所以我們需要一種方法在這些情況下使客戶端動態化。

IE:

  1. WebSocket的客戶端連接到端點。
  2. 服務器停機維護。
  3. 客戶端嘗試每xx秒重新連接一次。
  4. 服務器開始正常備份。
  5. 在下次重新連接嘗試時,客戶端已連接。

首先,我們嘗試使用內置在Wasync提供沒有骰子重新連接選項:

OptionsBuilder<DefaultOptions, DefaultOptionsBuilder> optBuilder = wsAuthClient.newOptionsBuilder() 
     .reconnect(true) 
     .pauseBeforeReconnectInSeconds(10); 

監聽器:

}).on(Event.REOPENED, new Function<String>() { 
     @Override 
     public void on(String t) { 
      logger.info("Re-opened connection to server."); 
     } 

基於我讀過在文檔中,當連接被@ManagedService特意關閉時,這會被觸發嗎?

有沒有人遇到過這些類型的用例並且有解決方案?

回答

1

我已經通過在@ManagedService類端點中的方法上使用@Get或@Post註釋來解決此問題。因此,我的客戶端通過執行HTTP請求來輪詢該端點,如果它返回200 OK,那麼這意味着服務器已準備好接受連接。

SUDO:

while(!connected){ 
    //Do GET/POST to server to see if status is 200 OK. 
    if (request.status == 200){ 
     connected = true; 
     connectToWs(); 
    } 
    // otherwise delay and re-attempt request. 
} 
+0

弄來爲什麼'REOPENED'事件處理程序不會被調用?並且服務器還發送了客戶端未收到的消息。 – manikanta

+0

@manikanta對不起,我很長一段時間沒有在這個項目上工作過。我非常肯定,團隊完全轉向了不同的框架/解決方案。乾杯! – proulxs

相關問題