實(shí)時(shí)獲取列表的每條數(shù)據(jù)的狀態(tài),每次請(qǐng)求接口顯然浪費(fèi)資源,所以采用了WebSocket+SockJS+Stomp來(lái)實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)刷新。
直接上例子
html引入
<script src="http://cdn.bootcss.com/sockjs-client/1.1.1/sockjs.min.js"></script>
<script src="http://cdn.bootcss.com/stomp.js/2.3.3/stomp.js"></script>
<script src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
js
//連接
$scope.connectImportLogs = function() {
var socket = new SockJS(WEBSOCKET_URL); //websocket_url
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
stompClient.subscribe('/message/queue/notice', function(message){ //接口
var importLogs = JSON.parse(message.body); //獲得的數(shù)據(jù)
});
});
}
//發(fā)送
stompClient.send("/app/get_server", {},JSON.stringify({"session_id":sessionId}));
//
2.重連
在使用websocket過(guò)程中,可能會(huì)出現(xiàn)網(wǎng)絡(luò)斷開的情況,比如信號(hào)不好,或者網(wǎng)絡(luò)臨時(shí)性關(guān)閉,這時(shí)候websocket的連接已經(jīng)斷開,而瀏覽器不會(huì)執(zhí)行websocket 的 onclose方法,我們無(wú)法知道是否斷開連接,也就無(wú)法進(jìn)行重連操作。
如果希望websocket連接一直保持,一般在close或者error上綁定重新連接方法。
stompClient.ws.onclose = function () {
connect();
}
stompClient.ws.onerror = function () {
connect();
}