物聯網智慧家居中使用WebSocket和Spring Boot實現全雙工客服通訊 -DZone Java
在本文中,我們將介紹建立由Spring Boot驅動的Java WebSocket伺服器的步驟,該伺服器與Java客戶端通訊並支援多個例項之間的負載平衡。我們將首先描述用例場景,分析需求,然後繼續選擇適合該情況的技術堆疊。我們將實現程式碼,最後測試應用程式以獲得一些效能和永續性基準。
用例:智慧家居
在我們的方案中,所有智慧裝置都具有與伺服器的持久連線。伺服器負責將命令傳送到特定裝置,例如開啟客廳燈或啟用警報。它還可以從裝置接收資訊。例如,可能有一個溫度感測器每分鐘讀取一次讀數,或者有一個烤箱在溫度過高時發出警報。最後,伺服器還可以向所有裝置發出命令,例如開啟/關閉。該伺服器還公開了REST API,供使用者用來收集資訊和控制裝置。
從現在開始,我們將智慧裝置稱為客戶端。因此,讓我們寫下需求:
- 使用憑據登入客戶端:我們假設每個客戶端都有一對用於對伺服器進行身份驗證的憑據(使用者名稱和密碼)。
- 與伺服器的持久連線:客戶端與伺服器保持雙向持久連線。
- 點對點通訊:伺服器必須能夠向特定客戶端傳送(和接收)訊息。
- 廣播訊息:伺服器必須能夠向所有客戶端廣播訊息。
- 斷開的連線檢測和恢復:客戶端應該能夠檢測到斷開的連線並嘗試自動重新連線。
- 伺服器可伸縮性:如果網路流量過高,則必須輕鬆擴充套件伺服器應用程式例項的數量。
技術棧
現在已經建立了需求,我們將描述用於實現解決方案的技術堆疊。對於伺服器,我們將使用微服務模式。每個微服務(MS)都是使用Spring Boot框架(尤其是Web on Servlet堆疊)以Java 11編寫的。與客戶端的通訊由裝置管理MS處理。Control MS公開REST API,並使用ActiveMQ Artemis訊息代理與Device Mgmt MS通訊。對於傳入的流量路由,服務發現和負載平衡,我們將使用Spring Cloud Gateway和Eureka。
如前所述,伺服器和客戶端通過WebSocket進行通訊。該協議允許持久的全雙工通訊,以及伺服器和客戶端都檢測到斷開的連線。
因為WebSocket是一個低階協議,沒有指定傳輸訊息的結構,所以我們還需要實現一個更高階別的協議,這將是傳送方和接收方之間的“契約”。為此,我們將使用STOMP(面向簡單文字的訊息協議)。我們還將配置Spring與專門的STOMP代理一起工作,以實際廣播訊息。一種簡單的方法是使用一個簡單的記憶體代理。但是,當您擴充套件並新增其他伺服器時,這種方法不足。連線到不同伺服器的使用者將無法交流或獲取更新到另一臺伺服器上發生的事情。因此,我們將使用外部代理(ActiveMQ Artemis)。有關更多詳細資訊,請參見此處:Spring框架參考-外部代理
程式碼詳情點選標題見原文
相關文章
- 在Spring Boot中實現WebSocket實時通訊Spring BootWeb
- 全雙工通訊的 WebSocketWeb
- 使用Java實現WebSocket通訊JavaWeb
- 樂訊通雲通訊:物聯網路卡在智慧家居的應用
- 樂訊通雲通訊:物聯網路卡在智慧家居里的應用
- 樂訊通雲通訊:細數智慧家居里的那些物聯網應用
- 樂訊通雲通訊:物聯卡,現代智慧家居技術的必不可缺
- 樂訊通雲通訊:物聯網在智慧家居中都有哪些應用場景?
- Spring Boot 開發整合 WebSocket,實現私有即時通訊系統Spring BootWeb
- Spring Boot中使用WebSocket總結(三):使用訊息佇列實現分散式WebSocketSpring BootWeb佇列分散式
- 智慧家居簡單實現---使用ESP8266簡單實現和APP通訊APP
- 樂訊通雲通訊:物聯網路卡在智慧家居領域的應用主要在哪裡
- 單工,半雙工,全雙工通訊區別
- 開源物聯網平臺和智慧家居平臺
- 結合DDD和Spring Boot實現基於REST API的併發控制 -DZone JavaSpring BootRESTAPIJava
- 樂訊通雲通訊:物聯網路卡在物聯網中起到什麼作用
- Spring Boot系列20 Spring Websocket實現向指定的使用者傳送訊息Spring BootWeb
- Uniapp 使用 GoEasy 實現 websocket 實時通訊APPGoWeb
- 樂訊通雲通訊:物聯網路卡智慧管理智慧水錶
- 樂訊通雲通訊:物聯網路卡助力智慧音響
- 樂訊通雲通訊:物聯網路卡在智慧醫療中的應用
- 樂訊通雲通訊:物聯網路卡在智慧城市建設中的作用
- Spring Boot系列22 Spring Websocket實現websocket叢集方案的DemoSpring BootWeb
- Spring Boot系列21 Spring Websocket實現websocket叢集方案討論Spring BootWeb
- 樂訊通雲通訊:物聯網路卡在車聯網中的作用
- Spring Boot 從1.5遷移到2.0.5 - DZone JavaSpring BootJava
- 物聯網:實現sIoT配置並實現sIoT上mqtt訊息的通訊MQQT
- java netty 實現 websocket 服務端和客戶端雙向通訊 實現心跳和斷線重連 完整示例JavaNettyWeb服務端客戶端
- Spring Boot系列十七 Spring Boot 整合 websocket,使用RabbitMQ做為訊息代理Spring BootWebMQ
- 在vue中使用SockJS實現webSocket通訊VueJSWeb
- 雙向通訊之websocketWeb
- 樂訊通雲通訊:物聯卡與物聯網技術讓窗簾更加的智慧化
- 物聯網全連線工廠:實現生產過程資料採集及智慧管理
- MQTT物聯網通訊協議入門及Demo實現MQQT協議
- 物通博聯工業裝置資料平臺,助力實現裝置全生命週期智慧管理
- Spring Boot事務傳播機制 - DZone JavaSpring BootJava
- .net core 和 WPF 開發升訊威線上客服與營銷系統:使用 WebSocket 實現訪客端通訊Web
- Spring Boot 和 Thymeleaf 實現 Java 版 HTMXSpring BootJava