websocket(推送服務)初始化及實際專案運用
首先要知道http協議和websocket的區別
簡單來說,http是客戶端向服務端傳送請求,三次握手建立連結,請求一次就返回一次資料,
websocket是持久的連結,只需要建立連結後,後端有訊息更新可推送至客戶端,不需要客戶端再傳送請求。
專案中的運用
實際專案中,頁面需要利用websocket的推送,動態展示機器人頁面的告警資訊和執行狀態資訊。
效果:左上角選擇機器人後,頁面會先向後端介面獲取一次告警資訊,攝像機資訊,機器人位置狀態資訊的資料。後面通過websocket推送實時的告警資訊和位置狀態資訊,完成展示。
websocket的使用:
1.初始化websocket,methods中定義initWebSocket方法,這裡是在選擇機器人後去呼叫
initWebSocket(terminalId) {
let url = window.webSocketList.robotStatusUrl + terminalId; //window物件中存入的url(ws或者wss開頭)
this.websock = new WebSocket(url); //建立
this.websock.onmessage = this.getMessage; //監聽websocket更新(和後端連線成功後,有訊息更新會自動觸發)
this.websock.onopen = this.open; //監聽開啟
this.websock.onerror = this.error; //監聽失敗報錯
this.websock.onclose = this.closeWebSocket; //監聽關閉
},
2.定義監聽內需要執行的操作
getMessage(msg) { //獲取message
let res = JSON.parse(msg.data) || {};
//獲取狀態資訊
if (res.code == "robot_status") {
let type = res.items[0].type;
// 獲取數值,翻譯為狀態
switch (type) {
case 1:
type = "batteryStatus";
break;
case 2:
type = "communicateStatus";
break;
case 3:
type = "ultrasoundStatus";
break;
case 4:
type = "driveStatus";
break;
}
//判斷有無value_unit欄位, 然後迴圈物件,給對應的狀態屬性賦值
if (res.items[0].value_unit) {
for (let item in this.robotStateInfo) {
if ((item = type)) {
this.robotStateInfo[item] = res.items[0].value_unit - 0;
}
}
} else {
for (let item in this.robotStateInfo) {
if ((item = type)) {
this.robotStateInfo[item] = res.items[0].value_unit - 0;
}
}
}
}
},
open() {
console.log("連結成功");
this.websock.send(""); //這裡呼叫socket中 .send()方法可以給服務端傳送資訊
},
error() {
console.log("連結失敗");
},
closeWebSocket(e) {
console.log("websocket關閉", e);
},
3.在路由銷燬之前關閉websocket
beforeDestroy() {
if (this.websock) {
this.websock.close();
} //離開路由之後斷開websocket連線
console.log("銷燬了websocket");
},
注意事項:
1.url地址,一般是ws或者wss開頭的地址,ws是不加密的,wss加密,類似於http和https,一定要確保地址正確(例:ws://192.168.40.174:8080/websocket/terminal_id_1)
2.頁面銷燬或者重新選擇機器人的時候,一定要先關閉websocket連線,否則會出現推送的還是之前機器人資訊的情況
---------------------個人專案筆記
相關文章
- 利用WebSocket和EventSource實現服務端推送Web服務端
- 用 Go 編寫一個簡單的 WebSocket 推送服務GoWeb
- 服務端主動推送技術☞WebSocket服務端Web
- WebSocket實現服務端推送訊息和聊天會話Web服務端會話
- 用 Golang 實現百萬級 Websocket 服務GolangWeb
- Spring Boot 整合 WebSocket 實現服務端推送訊息到客戶端Spring BootWeb服務端客戶端
- 用 Go + WebSocket 快速實現一個 chat 服務GoWeb
- springboot2整合websocket,實現服務端推送訊息到客戶端Spring BootWeb服務端客戶端
- 用 golang 去實現類似 swoole 的 websocket 服務 ?GolangWeb
- WebSocket服務搭建Web
- 正規表示式中的“環視”及實際專案應用
- 關於MVP分層架構在專案中的實際運用MVP架構
- Flutter websocket 實現訊息推送FlutterWeb
- Spring Websocket實現文字、圖片、聲音、檔案下載及推送、接收及顯示(叢集模式)SpringWeb模式
- 【Azure 應用服務】App Service for Linux 中實現 WebSocket 功能 (Python SocketIO)APPLinuxWebPython
- kafka和websocket實時資料推送KafkaWeb
- websocket 運用詳解Web
- 用nodejs-websocket開發一個websoket服務NodeJSWeb
- 【FAQ】推送服務常見問題及解決方案
- Spring Boot實際專案用簡單的AOPSpring Boot
- Go實現基於WebSocket的彈幕服務GoWeb
- 用create-react-app命令初始化react專案及錯誤處理ReactAPP
- java WebSocket 服務端程式碼JavaWeb服務端
- nestjs搭建HTTP與WebSocket服務JSHTTPWeb
- C#建立WebSocket服務端C#Web服務端
- 專業服務業務及專案管理方案:使用BPM軟體的五種優勢專案管理
- 基於 Hyperf 實現 RabbitMQ + WebSocket 訊息推送MQWeb
- TradingView + WebSocket 實時推送 K 線脫坑指南ViewWeb
- 基於 swoole 的 websocket 服務實現狀態同步Web
- 推送服務本地通知頻次及分類管控通知
- 服務日誌及控制代碼數採集推送指令碼指令碼
- JavaScript Array Object的實際運用JavaScriptObject
- 專案實戰之gradle在實際專案中的使用Gradle
- 微信小程式服務推送微信小程式
- feed服務專案設計思考
- React服務端渲染(專案搭建)React服務端
- SAS服務效能問題專案
- 使用 Go 語言建立 WebSocket 服務GoWeb