欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot+WebSocket向前端推送消息的實(shí)現(xiàn)示例

 更新時(shí)間:2024年08月05日 09:29:25   作者:iQM75  
WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,允許服務(wù)器主動(dòng)向客戶端推送信息,同時(shí)也能從客戶端接收信息,本文主要介紹了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,并重寫configureMessageBrokerregisterStompEndpoints方法。 

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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中ReentrantLock4種常見的坑

    Java中ReentrantLock4種常見的坑

    本文主要介紹了Java中ReentrantLock?4種常見的坑,ReentrantLock默認(rèn)情況下為非公平鎖,下文關(guān)于其更多詳情需要的小伙伴可以參考一下
    2022-05-05
  • springboot mybatis調(diào)用多個(gè)數(shù)據(jù)源引發(fā)的錯(cuò)誤問題

    springboot mybatis調(diào)用多個(gè)數(shù)據(jù)源引發(fā)的錯(cuò)誤問題

    這篇文章主要介紹了springboot mybatis調(diào)用多個(gè)數(shù)據(jù)源引發(fā)的錯(cuò)誤問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java中的@Builder注解問題詳解

    Java中的@Builder注解問題詳解

    這篇文章主要介紹了Java中的@Builder注解詳解,@Builder 注解的其中一個(gè)大坑會(huì)導(dǎo)致默認(rèn)值失效,這是使用此注解出現(xiàn)的一個(gè)問題,總的來說,不推薦再使用 @Builder 注解,接下來講重點(diǎn)介紹其原因和替代方案,需要的朋友可以參考下
    2023-10-10
  • java 對象輸入輸出流讀寫文件的操作實(shí)例

    java 對象輸入輸出流讀寫文件的操作實(shí)例

    這篇文章主要介紹了java 對象輸入輸出流讀寫文件的操作實(shí)例的相關(guān)資料,這里使用實(shí)現(xiàn)Serializable接口,需要的朋友可以參考下
    2017-07-07
  • MyBatis獲取插入記錄的自增長字段值(ID)

    MyBatis獲取插入記錄的自增長字段值(ID)

    本文分步驟給大家介紹了MyBatis獲取插入記錄的自增長字段值的方法,在文中給大家提到了mybatis返回插入數(shù)據(jù)的自增長id,需要的朋友可以參考下
    2017-11-11
  • JAVA使用JDBC連接oracle數(shù)據(jù)庫的詳細(xì)過程

    JAVA使用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-05
  • Java虛擬機(jī)處理異常的最佳方式

    Java虛擬機(jī)處理異常的最佳方式

    這篇文章主要給大家介紹了關(guān)于Java虛擬機(jī)處理異常的最佳方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java持久層面試題目及答案整理

    Java持久層面試題目及答案整理

    在本篇文章里小編給大家分享的是一篇關(guān)于Java持久層面試題目及答案整理內(nèi)容,需要的朋友們學(xué)習(xí)參考下。
    2020-02-02
  • MyBatis-Plus多表聯(lián)查的實(shí)現(xiàn)方法(動(dòng)態(tài)查詢和靜態(tài)查詢)

    MyBatis-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-03
  • java 將字符串、list 寫入到文件,并讀取內(nèi)容的案例

    java 將字符串、list 寫入到文件,并讀取內(nèi)容的案例

    這篇文章主要介紹了java 將字符串、list 寫入到文件,并讀取內(nèi)容的案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評(píng)論