SpringBoot+WebSocket向前端推送消息的實(shí)現(xiàn)示例
什么是WebSocket
WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,允許服務(wù)器主動(dòng)向客戶端推送信息,同時(shí)也能從客戶端接收信息。
WebSocket協(xié)議誕生于2008年,并在2011年成為國際標(biāo)準(zhǔn)。這種協(xié)議解決了傳統(tǒng)HTTP請求中需要不斷輪詢服務(wù)器的問題,通過建立持久化的連接,實(shí)現(xiàn)了高效的雙向數(shù)據(jù)傳輸。具體如下:
- 基本特點(diǎn):WebSocket建立在TCP協(xié)議之上,提供了一個(gè)全雙工通信通道。這意味著服務(wù)器和客戶端可以在一個(gè)連接上同時(shí)發(fā)送和接收信息,且數(shù)據(jù)交換更加高效。
- 協(xié)議兼容:雖然WebSocket是一個(gè)獨(dú)立的協(xié)議,但它在握手階段使用HTTP協(xié)議,以確保與現(xiàn)有系統(tǒng)的兼容性。其默認(rèn)端口也是80和443,使得它可以通過各種HTTP代理服務(wù)器。
- 應(yīng)用場景:WebSocket非常適合需要實(shí)時(shí)數(shù)據(jù)交互的應(yīng)用,如聊天應(yīng)用、在線游戲、實(shí)時(shí)通知等。
- 數(shù)據(jù)格式:WebSocket支持傳輸文本和二進(jìn)制數(shù)據(jù),并且數(shù)據(jù)格式輕量,開銷小,性能高。
- API使用:在開發(fā)中,可以使用WebSocket API輕松地創(chuàng)建和管理連接,并通過這些連接發(fā)送和接收數(shù)據(jù)。例如,在JavaScript中,可以這樣創(chuàng)建和處理WebSocket連接:
// 創(chuàng)建WebSocket連接 var socket = new WebSocket('ws://localhost:8080'); // 連接成功觸發(fā) socket.addEventListener('open', function (event) { socket.send('Hello Server!'); }); // 監(jiān)聽消息 socket.addEventListener('message', function (event) { console.log('Message from server ', event.data); });
綜上所述,WebSocket通過提供高效、低開銷的雙向通信協(xié)議,極大地改善了實(shí)時(shí)數(shù)據(jù)傳輸?shù)捏w驗(yàn),適用于需要頻繁數(shù)據(jù)交互的應(yīng)用場景 。
實(shí)現(xiàn)
1、在你的pom.xml
文件中添加以下依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
2、創(chuàng)建一個(gè)配置類,繼承AbstractWebSocketMessageBrokerConfigurer
,并重寫configureMessageBroker
和registerStompEndpoints
方法。
import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); config.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/websocket").withSockJS(); } }
3、創(chuàng)建一個(gè)類,用于處理客戶端發(fā)送的消息和向客戶端發(fā)送消息。
import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.stereotype.Controller; @Controller public class WebSocketController { @MessageMapping("/send") @SendTo("/topic/messages") public String handleMessage(String message) { return "Received: " + message; } }
4、在前端,你需要使用SockJS和STOMP.js庫來連接WebSocket服務(wù)器并接收消息。首先,確保你已經(jīng)在HTML文件中引入了這兩個(gè)庫:
<script src="https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.5.0/sockjs.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>
5、然后,你可以使用以下JavaScript代碼連接到WebSocket服務(wù)器并接收消息:
// 建立連接 var socket = new SockJS('/websocket'); var stompClient = Stomp.over(socket); // 連接到服務(wù)器 stompClient.connect({}, function (frame) { console.log('Connected: ' + frame); // 訂閱消息 stompClient.subscribe('/topic/messages', function (message) { console.log('Received: ' + message.body); }); }); // 發(fā)送消息 function sendMessage() { var message = document.getElementById('message').value; stompClient.send("/app/send", {}, message); }
現(xiàn)在,當(dāng)你調(diào)用sendMessage
函數(shù)時(shí),它將通過WebSocket向后端發(fā)送消息,后端將處理該消息并將其廣播到所有訂閱了/topic/messages
的客戶端。
到此這篇關(guān)于SpringBoot+WebSocket向前端推送消息的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot WebSocket推送消息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息的示例
- SpringBoot2.0集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息
- Spring?Boot?使用?SSE?方式向前端推送數(shù)據(jù)詳解
- SpringBoot整合WebSocket實(shí)現(xiàn)后端向前端主動(dòng)推送消息方式
- SpringBoot集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息
- SpringBoot使用WebSocket實(shí)現(xiàn)向前端推送消息功能
- 利用Netty+SpringBoot實(shí)現(xiàn)定時(shí)后端向前端推送數(shù)據(jù)
相關(guān)文章
springboot mybatis調(diào)用多個(gè)數(shù)據(jù)源引發(fā)的錯(cuò)誤問題
這篇文章主要介紹了springboot mybatis調(diào)用多個(gè)數(shù)據(jù)源引發(fā)的錯(cuò)誤問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01JAVA使用JDBC連接oracle數(shù)據(jù)庫的詳細(xì)過程
JDBC是一種用于執(zhí)行SQL語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成,下面這篇文章主要給大家介紹了關(guān)于JAVA使用JDBC連接oracle數(shù)據(jù)庫的詳細(xì)過程,需要的朋友可以參考下2023-05-05MyBatis-Plus多表聯(lián)查的實(shí)現(xiàn)方法(動(dòng)態(tài)查詢和靜態(tài)查詢)
本文用示例介紹使用MyBatis-Plus進(jìn)行多表查詢的方法,包括靜態(tài)查詢和動(dòng)態(tài)查詢,通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-03-03java 將字符串、list 寫入到文件,并讀取內(nèi)容的案例
這篇文章主要介紹了java 將字符串、list 寫入到文件,并讀取內(nèi)容的案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09