1. 程式人生 > >spring-websocket --WebSocketStompClient端實現自動重連

spring-websocket --WebSocketStompClient端實現自動重連

轉自https://blog.csdn.net/u013174217/article/details/53376793

websocketstompclient端實現和服務端建立連線和通訊之後,如果服務端斷開或重啟,client端需要實現自動定時重連機制。

查閱了官網和一些資料沒有找到相關的原始碼,自己寫了個:

在client端重寫StompSessionHandlerAdapter的類中重寫handleTransportError方法:

  1. @Override
  2. publicvoid handleTransportError(StompSession session, Throwable exception) {  
  3.     if
     (exception instanceof ConnectionLostException || !isConnected) {  
  4.         // if connection lost, call this
  5.         isConnected = false;  
  6.         while (!isConnected) try {  
  7.             Thread.sleep(5000);  
  8.             //new connect--start
  9.             WebSocketClient webSocketClient = new SockJsClient(transports);  
  10.             WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient);  
  11.             stompClient.setInboundMessageSizeLimit(size);  
  12.             stompClient.setMessageConverter(new MappingJackson2MessageConverter());  
  13.             stompClient.setTaskScheduler(new DefaultManagedTaskScheduler()); 
    // for heartbeats
  14.             stompClient.connect(url, wsHeaders, sessionHandler);  
  15.             //new connect--end
  16.             isConnected = true;  
  17.         } catch (Exception e) {  
  18.             logger.error("error {}", e.getMessage());  
  19.         }  
  20.     }  
  21. }  

程式碼解釋:WebSocketStompClient的connect失敗後會被這個方法捕獲並處理,此處捕獲ConnectionLostException錯誤,則每隔5秒重新建立連線。

                  建立connect即new connect的程式碼區域為建立client連線的地方,需要根據程式碼情況自己修改。

執行之後服務端斷開,client端會每隔5s發起一次連線,連線失敗則報錯。如果服務端啟動後,client端則會正常連線成功。

以上這種方法,並不是一種很好的方法,

更好的是

ListenableFuture<StompSession> future = stompClient.connect(url, logHandler);
try {
    session = future.get();
    session.setAutoReceipt(true);
}
catch (Exception e) {
    e.printStackTrace();
}

每隔2秒鐘,boolean connected = session.isConnected();

如果為false就,重新呼叫一次connect

相關推薦

spring-websocket --WebSocketStompClient實現自動

轉自https://blog.csdn.net/u013174217/article/details/53376793websocketstompclient端實現和服務端建立連線和通訊之後,如果服務端斷開或重啟,client端需要實現自動定時重連機制。查閱了官網和一些資料沒

微信小程式 實現websocket長連線 以及斷開連線之後自動

app.js let socketMsgQueue = [] let isLoading = false App({ globalData: { userInfo: null, localSocket: {}, callback: function () {} },

WebSocket的心跳檢測和Spring的整合

最近搞好論文,對其中的WebSocket中相對比較實用的技術做一個總結,這個東西之前是用來作前後臺的監控資料的實時通訊,主要記錄一下心跳包和重連的過程,websocket中的心跳這裡是通過客戶端定義一個定時器實現,主要程式碼如下: //心跳檢測,每20s心跳一次 v

Java NIO SocketChannel客戶例子(支援連線失敗後自動

這兩天想找找標題裡說的這個示例程式碼,發現網上這麼多教程,連怎麼樣實現自動重連都不講,所以把自己寫的例子貼上來。僅僅使用遞迴,不使用多執行緒,就可以實現初步的目的: import java.io.IOException; import java.net.ConnectExc

JavaScript實現H5遊戲斷線自動的技術

斷線重連的需求 尤其是手機上,會因為網路的不穩定或者其他原因,導致使用者的socket連結斷開。這個時候如果直接讓玩家退出遊戲,重新登入,無疑是非常影響使用者體驗的事情。所以根據這個需求,就有需要程式來實現斷線後自動重連回去的技術,是使用者能夠再次快速開始遊戲

Jboss數據庫接斷開自動

jbossJboss默認配置是數據庫連接端口後,服務就會出現異常,無法訪問,此時必須重啟Jboss服務才能重新連接上數據庫。在jboss/server/defult/deploy/oracle-ds.xml中加入:<new-connection-sql>select 1 from dual<

[轉]樹莓派.設置自動WiFi

system init.d defaults href ans start class ati call 由於不可知的原因,有可能會導致樹莓派失去連接,這時候需要重新連接WiFi。 自動重連的原理是,定期查看是否斷網,如果斷網了重啟WiFi,參考的文章是這篇,第一步略有修

使用Spring Boot開發者工具進行自動啟和頁面自動刷新

spring spring boot spring boot開發者工具 spring boot自動重啟 簡介 大家可能都聽說過開發Node.js應用時可以使用多種工具對開發者提供便利,如WebPack提供了開發者服務器來支持js應用動態更替,並在保存文件時自動刷新瀏覽器。Spring Boot

TCP自動

list save Coding locale [] ext eat blocking one 網上模板: public class Socket_wrapper { public static Socket theSocket = nul

spring websocket 和socketjs實現單聊群聊,廣播的消息推送詳解

退出 rec oid -name 返回 classes sockets 們的 tomcat7.0 spring websocket 和socketjs實現單聊群聊,廣播的消息推送詳解 WebSocket簡單介紹   隨著互聯網的發展,傳統的HTTP協議已經很難滿足Web應用

Keepalived實現心跳檢測實現自動

專案中伺服器如果發生宕機:1、故障轉移 2、心跳檢測 3、負載均衡 4、自動重啟   心跳檢測: 心跳檢測指令碼: 寫入nginx_check.sh指令碼 vi  /etc/keepalived/nginx_check.sh   #!/bin/bashA=`

PHP連線MySql閃斷自動的方法

使用php作為後臺執行程式(例如簡訊群發),在cli模式下執行php,php需要連線mysql迴圈執行資料庫處理。 當mysql連線閃斷時,之後迴圈的執行將會失敗。 我們需要設計一個方法,當mysql閃斷時,可以自動重新連線,使後面的程式可以正常執行下去。 1.建立測試資料表 CREATE&nbs

【HP-Socket沉思錄】在 OnClose 中自動

HP-Socket 版本 5.3.2   其實這裡是取了個巧,因為並不是真正意義上的在 OnClose 中。由於同一個連線的事件是序列的,所以 OnClose 事件不完成 socket 的狀態始終懸置。 可以在 OnClose 中

Spring Websocket+SockJS+STOMP實現即時通訊(零)—— 要點

Spring Websocket+SockJS+STOMP 實現即時通訊(一)—— 疑問解答 Spring Websocket+SockJS+STOMP 實現即時通訊(二)—— 簡單的訊息代理 Spr

Spring Websocket+SockJS+STOMP 實現即時通訊(三)—— ChannelInterceptor與ExecutorChannelInterceptor

ChannelInterceptor: Message被髮送到執行緒池,在傳送動作執行前(後)攔截,發生在當前執行緒。 ExecutorChannelInterceptor: Message被髮送到執行緒池後,線上程池持有的新執行緒中,在Message

Spring Websocket+SockJS+STOMP 實現即時通訊(四)—— MessageChannel

兩種MessageChannel實現 TemporaryReplyChannel 用於接收單個回覆訊息的臨時通道。在整個斷點除錯過程中沒有追蹤到,所以在這裡不詳細說明。 ExecutorSubscribableChannel 正如字面上所表示的這樣Ex

藍芽自動

1利用系統中的自動重連 getDevice().connectGatt(context, autoConnect, coreGattCallback); private BleGattCal

php-fpm容易假死,實現自動啟php服務的指令碼 通過後

通過後臺一直執行,檢測有問題就重啟。指令碼程式碼很少,語句很簡單,消耗系統資源非常低,可以試試。 感覺挺笨的方法,不過有效,呵呵~ #!/bin/bash #check php-fpm server up/down TelLog=/tmp/telphp.log while : do sleep 15

Spring Websocket+SockJS+STOMP 實現即時通訊(六)—— SubProtocolWebSocketHandler

目錄 WebsocketHandler SubProtocolWebSocketHandler 四個重要成員變數 protocolHandlerLookup 子協議

Spring Websocket+SockJS+STOMP 實現即時通訊(四)—— MessageHandler

目錄 MessageHandler的作用 MessageHandler實現類 兩類MessageHandler有什麼區別? MessageHandler的作用 上一節中我們提到過,E