SpringBoot 整合WebSocket 前端 uniapp 訪問(wèn)的詳細(xì)方法
第一次使用WebSocket,所以最需要一個(gè)及其簡(jiǎn)單的例子,跑通之后,增加自己對(duì)該技術(shù)的理解。(技術(shù)基礎(chǔ)介紹就免掉了,后面再補(bǔ))
案例邏輯:目前只有一個(gè)用戶(hù),而且是一個(gè)用戶(hù)給服務(wù)器發(fā)送數(shù)據(jù),服務(wù)給該用戶(hù)返回?cái)?shù)據(jù)
一、SpringBoot 整合 WebSocket
此處的邏輯一共三步
第一步,添加依賴(lài)項(xiàng)
第二步,添加配置
第三,寫(xiě)基礎(chǔ)服務(wù)類(lèi)
1. 添加websocket依賴(lài)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> <!--需要版本的自己加--> </dependency>
2. 添加配置
@Configuration public class WebSocketConfig { /** * ServerEndpointExporter 作用 * * 這個(gè)Bean會(huì)自動(dòng)注冊(cè)使用@ServerEndpoint注解聲明的websocket endpoint * * @return */ @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } }
3. 基礎(chǔ)服務(wù)工具類(lèi)
@ServerEndpoint(value = "/ws/{userId}") @Component @Slf4j public class WebSocketServer { private String userId; /** * @param session 是webSocket的會(huì)話(huà)對(duì)象,不是瀏覽器那個(gè)session * @param userId 用戶(hù)Id * @description 當(dāng)連接建立成功調(diào)用 **/ @OnOpen public void onOpen(Session session, @PathParam("userId") String userId) { this.userId = userId; System.out.println("建立連接"); } /** * @param session 會(huì)話(huà)對(duì)象 * @description 當(dāng)連接關(guān)閉調(diào)用 **/ @OnClose public void onClose(Session session) throws IOException { System.out.println("關(guān)閉連接"); } /** * @param message 客戶(hù)端發(fā)送的消息 * @param session 會(huì)話(huà)對(duì)象 * @description 當(dāng)客戶(hù)端發(fā)送消息時(shí)調(diào)用 **/ @OnMessage public void onMessage(String message, Session session) throws IOException { try{ System.out.println(message); //給客戶(hù)端發(fā)送消息 session.getBasicRemote().sendText("服務(wù)端定義的消息"); }catch(Exception e){ e.printStackTrace(); } } }
二、uniapp 構(gòu)建webSocket與服務(wù)器通信
前端邏輯
第一步:跟服務(wù)器建立連接
第二步:監(jiān)聽(tīng)WebSocket連接打開(kāi)事件,并在這個(gè)監(jiān)聽(tīng)事件中,主動(dòng)給服務(wù)端發(fā)送數(shù)據(jù)
第三步:監(jiān)聽(tīng)WebSocket接受到服務(wù)器的消息事件(你給服務(wù)器發(fā)送消息時(shí),它也會(huì)及時(shí)給前端返回?cái)?shù)據(jù))
1. 具體代碼
function webSocketFun(Integer userId){ //1. 通過(guò)用戶(hù)唯一id 與 服務(wù)端webSocket建立連接 uni.connectSocket({ url: `http://192.168.2.18:8080/ws/${userId}` }); //2. 監(jiān)聽(tīng)WebSocket連接打開(kāi)事件,并給服務(wù)端發(fā)送消息 var socketOpen = false; var socketMsgQueue = ["滕","禹","鑫"]; uni.onSocketOpen(function (res) { console.log('WebSocket連接已打開(kāi)'); socketOpen = true; for (var i = 0; i < socketMsgQueue.length; i++) { sendSocketMessage(socketMsgQueue[i]); } socketMsgQueue = []; }); function sendSocketMessage(msg) { if (socketOpen) { uni.sendSocketMessage({ data: msg }); } else { socketMsgQueue.push(msg); } } //3. 監(jiān)聽(tīng)WebSocket接受到服務(wù)器的消息事件 uni.onSocketMessage(function (res) { console.log('收到服務(wù)器返回的內(nèi)容為 ======' + res.data); }); }
到此這篇關(guān)于SpringBoot 整合WebSocket 前端 uniapp 訪問(wèn)的文章就介紹到這了,更多相關(guān)SpringBoot 整合WebSocket 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot整合Netty+Websocket實(shí)現(xiàn)消息推送的示例代碼
- springboot整合websocket后啟動(dòng)報(bào)錯(cuò)(javax.websocket.server.ServerContainer not available)
- Springboot整合WebSocket實(shí)戰(zhàn)教程
- SpringBoot整合WebSocket的客戶(hù)端和服務(wù)端的實(shí)現(xiàn)代碼
- SpringBoot中HttpSessionListener的簡(jiǎn)單使用方式
- 空指針HttpSession異常之SpringBoot集成WebSocket的方法
相關(guān)文章
SpringBoot整合RestTemplate用法的實(shí)現(xiàn)
本篇主要介紹了RestTemplate中的GET,POST,PUT,DELETE、文件上傳和文件下載6大常用的功能,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08關(guān)于MyBatisSystemException異常產(chǎn)生的原因及解決過(guò)程
文章講述了在使用MyBatis進(jìn)行數(shù)據(jù)庫(kù)操作時(shí)遇到的異常及其解決過(guò)程,首先考慮了事務(wù)問(wèn)題,但未解決,接著懷疑是MyBatis的一級(jí)緩存問(wèn)題,關(guān)閉緩存后問(wèn)題依舊存在,最終發(fā)現(xiàn)是SQL映射文件中的參數(shù)傳遞錯(cuò)誤,使用了錯(cuò)誤的標(biāo)簽導(dǎo)致循環(huán)插入2025-01-01使用java實(shí)現(xiàn)日志工具類(lèi)分享
這篇文章主要介紹的Java代碼工具類(lèi)是用于書(shū)寫(xiě)日志信息到指定的文件,并且具有刪除之前日志文件的功能,需要的朋友可以參考下2014-03-03mybatis多對(duì)多關(guān)聯(lián)實(shí)戰(zhàn)教程(推薦)
下面小編就為大家?guī)?lái)一篇mybatis多對(duì)多關(guān)聯(lián)實(shí)戰(zhàn)教程(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10IDEA中maven依賴(lài)報(bào)紅的問(wèn)題解決辦法
這篇文章主要給大家介紹了關(guān)于IDEA中maven依賴(lài)報(bào)紅的問(wèn)題解決辦法,在使用IDEA過(guò)程中,經(jīng)常會(huì)出現(xiàn)maven依賴(lài)報(bào)紅的問(wèn)題,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07java使用@Scheduled注解執(zhí)行定時(shí)任務(wù)
這篇文章主要給大家介紹了關(guān)于java使用@Scheduled注解執(zhí)行定時(shí)任務(wù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01詳解Spring Cloud 斷路器集群監(jiān)控(Turbine)
這篇文章主要介紹了詳解Spring Cloud 斷路器集群監(jiān)控(Turbine),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05java線(xiàn)程中斷?interrupt?和?LockSupport解析
這篇文章主要為大家介紹了java線(xiàn)程中斷?interrupt?和?LockSupport示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Spring Data環(huán)境搭建實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Spring Data環(huán)境搭建實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08