最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中使用原生WebSocket詳解

 更新時(shí)間:2025年11月07日 08:58:33   作者:Drl2024  
文章介紹了如何在SpringBoot中集成原生WebSocket,包括添加依賴、配置WebSocket、創(chuàng)建WebSocket處理器以及處理文本和二進(jìn)制消息,還提到如何通過(guò)URL路徑或查詢參數(shù)傳遞數(shù)據(jù),并展示了如何在后端獲取這些參數(shù)

SpringBoot中使用原生WebSocket

在Spring Boot中使用原生WebSocket(不使用STOMP協(xié)議)可以簡(jiǎn)化一些場(chǎng)景下的實(shí)現(xiàn),尤其是在不需要消息代理或復(fù)雜的消息格式時(shí)。

下面是集成原生WebSocket到Spring Boot項(xiàng)目中的步驟:

添加依賴

確保你的pom.xml文件中包含了WebSocket的支持。

<dependencies>
    <!-- Spring Boot Starter WebSocket -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
</dependencies>

配置WebSocket

創(chuàng)建一個(gè)配置類來(lái)啟用WebSocket支持并注冊(cè)端點(diǎn)。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        // 注冊(cè)WebSocket處理器,并設(shè)置跨域訪問(wèn)
        registry.addHandler(myWebSocketHandler(), "/ws").setAllowedOrigins("*");
    }

    public MyWebSocketHandler myWebSocketHandler() {
        return new MyWebSocketHandler();
    }
}

創(chuàng)建WebSocket處理器

定義一個(gè)處理器來(lái)處理WebSocket連接、接收消息和關(guān)閉連接等事件。

import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class MyWebSocketHandler extends TextWebSocketHandler {

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        // 當(dāng)建立連接后調(diào)用
        System.out.println("Connection established: " + session);
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        // 收到文本消息時(shí)調(diào)用
        String payload = message.getPayload();
        System.out.println("Received message: " + payload);

        // 回應(yīng)客戶端
        session.sendMessage(new TextMessage("Echo: " + payload));
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        // 連接關(guān)閉后調(diào)用
        System.out.println("Connection closed: " + session);
    }
}

前端代碼示例 (JavaScript)

前端可以通過(guò)JavaScript直接與WebSocket服務(wù)器交互,無(wú)需額外的庫(kù)。

<!DOCTYPE html>
<html>
<head>
    <title>Native WebSocket Example</title>
</head>
<body>
    <input type="text" id="message"/>
    <button onclick="sendMessage()">Send</button>
    <ul id="messages"></ul>

    <script type="text/javascript">
        var ws = null;

        function connect() {
            // 連接到WebSocket服務(wù)器
            ws = new WebSocket('ws://localhost:8080/ws');

            ws.onopen = function() {
                console.log('Connected to server');
            };

            ws.onmessage = function(event) {
                // 接收到服務(wù)器的消息時(shí)調(diào)用
                var messages = document.getElementById('messages');
                var messageElement = document.createElement('li');
                messageElement.textContent = event.data;
                messages.appendChild(messageElement);
            };

            ws.onclose = function() {
                console.log('Disconnected from server');
            };
        }

        function sendMessage() {
            var messageContent = document.getElementById('message').value;
            if (ws && ws.readyState === WebSocket.OPEN) {
                ws.send(messageContent);
            }
        }

        window.onload = connect; // 頁(yè)面加載完成后連接
    </script>
</body>
</html>

這段代碼展示了如何使用原生的WebSocket API建立連接、發(fā)送消息以及接收來(lái)自服務(wù)器的消息。這里沒(méi)有使用SockJS或STOMP,更適合于簡(jiǎn)單的雙向通信場(chǎng)景。

以上就是Spring Boot中集成原生WebSocket的基本過(guò)程。根據(jù)你的需求,你可能還需要添加更多功能,比如身份驗(yàn)證、錯(cuò)誤處理等。此外,請(qǐng)注意設(shè)置合適的跨域策略,以確保WebSocket的安全性。

如何通過(guò)MyWebSocketHandler接受前端傳過(guò)來(lái)的參數(shù)處理文本或二進(jìn)制消息?

直接使用WebSocketHandler

不使用STOMP協(xié)議,直接使用WebSocketHandler,可以通過(guò)覆蓋handleTextMessage方法來(lái)處理從客戶端發(fā)送來(lái)的消息。在這個(gè)方法中,可以解析消息內(nèi)容并提取出參數(shù)。

后端代碼示例(Java)

import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class MyWebSocketHandler extends TextWebSocketHandler {

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        // 解析消息內(nèi)容
        String payload = message.getPayload();
        // 這里可以將payload轉(zhuǎn)換為JSON對(duì)象,然后獲取參數(shù)
        // 假設(shè)我們有一個(gè)工具類JsonUtil可以進(jìn)行JSON解析
        Map<String, Object> params = JsonUtil.parse(payload, Map.class);

        // 根據(jù)參數(shù)做相應(yīng)的處理...
        // 如果需要響應(yīng)客戶端,可以使用session.sendMessage(new TextMessage(response));
    }

    // ...其他必要的方法重寫
}

為了能夠解析JSON格式的消息體,你需要引入適當(dāng)?shù)囊蕾?,比如Jackson或者Gson等。如果你使用的是Maven構(gòu)建工具,可以在pom.xml中添加如下依賴:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version> <!-- 確保使用最新穩(wěn)定版本 -->
</dependency>

URL路徑/查詢參數(shù)

你也可以在WebSocket握手時(shí)通過(guò)URL路徑或查詢參數(shù)傳遞數(shù)據(jù)。這通常用于傳遞一些初始化信息,例如用戶ID、會(huì)話令牌等。

后端代碼示例(Java)

import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class MyWebSocketHandler extends TextWebSocketHandler {

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        // 獲取URL中的查詢參數(shù)
        MultiValueMap<String, String> queryParams = session.getUri().getQueryParams();
        // 或者從path variables中獲取
        // String userId = (String) session.getAttributes().get("userId");

        super.afterConnectionEstablished(session);
    }

    // ...其他方法
}

在上述示例中,可以通過(guò)session.getUri()來(lái)獲取原始的WebSocket URL,并從中提取出任何路徑變量或查詢參數(shù)。

這些參數(shù)可以在連接建立后立即使用,或者存儲(chǔ)起來(lái)供后續(xù)消息處理時(shí)使用。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用hutool實(shí)現(xiàn)文件大小的友好輸出

    Java使用hutool實(shí)現(xiàn)文件大小的友好輸出

    這篇文章主要為大家詳細(xì)介紹了Java如何使用hutool實(shí)現(xiàn)文件大小的友好輸出,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2023-11-11
  • 基于java實(shí)現(xiàn)的ECC加密算法示例

    基于java實(shí)現(xiàn)的ECC加密算法示例

    這篇文章主要介紹了基于java實(shí)現(xiàn)的ECC加密算法,簡(jiǎn)單說(shuō)明了ECC算法的概念、原理,并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)ECC加密算法的定義與使用技巧,需要的朋友可以參考下
    2017-08-08
  • java序列化和serialVersionUID的使用方法實(shí)例

    java序列化和serialVersionUID的使用方法實(shí)例

    這篇文章主要介紹了java序列化和serialVersionUID的使用方法實(shí)例的相關(guān)資料,這里說(shuō)明很詳細(xì)的使用方法讓你徹底學(xué)會(huì),需要的朋友可以參考下
    2017-08-08
  • Java設(shè)置Access-Control-Allow-Origin允許多域名訪問(wèn)的實(shí)現(xiàn)方法

    Java設(shè)置Access-Control-Allow-Origin允許多域名訪問(wèn)的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java設(shè)置Access-Control-Allow-Origin允許多域名訪問(wèn)的實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • Spring 使用 feign時(shí)設(shè)置header信息的操作

    Spring 使用 feign時(shí)設(shè)置header信息的操作

    這篇文章主要介紹了Spring 使用 feign時(shí)設(shè)置header信息的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 如何通過(guò)SpringBoot實(shí)現(xiàn)商城秒殺系統(tǒng)

    如何通過(guò)SpringBoot實(shí)現(xiàn)商城秒殺系統(tǒng)

    這篇文章主要介紹了如何通過(guò)SpringBoot實(shí)現(xiàn)商城秒殺系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • jar包中替換指定的class文件方法詳解

    jar包中替換指定的class文件方法詳解

    這篇文章主要為大家介紹了jar包中替換指定的class文件方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java?從json提取數(shù)組并轉(zhuǎn)換為list的操作方法

    Java?從json提取數(shù)組并轉(zhuǎn)換為list的操作方法

    這篇文章主要介紹了Java?從json提取出數(shù)組并轉(zhuǎn)換為list,使用getJSONArray()獲取到j(luò)sonarray后,再將jsonArray轉(zhuǎn)換為字符串,最后將字符串解析為L(zhǎng)ist列表,本文通過(guò)實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2022-10-10
  • Java結(jié)合JS實(shí)現(xiàn)URL編碼與解碼

    Java結(jié)合JS實(shí)現(xiàn)URL編碼與解碼

    這篇文章介紹了Java結(jié)合JS實(shí)現(xiàn)URL編碼與解碼的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 詳解Spring Kafka中關(guān)于Kafka的配置參數(shù)

    詳解Spring Kafka中關(guān)于Kafka的配置參數(shù)

    這篇文章主要介紹了詳解Spring Kafka中關(guān)于Kafka的配置參數(shù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08

最新評(píng)論

鄯善县| 宁晋县| 宁都县| 景泰县| 桦川县| 绥江县| 于都县| 喀什市| 长武县| 广东省| 巴南区| 珠海市| 宝鸡市| 庆元县| 瑞金市| 鄂伦春自治旗| 南涧| 当雄县| 上栗县| 柳林县| 庆元县| 巴林左旗| 中西区| 逊克县| 玉屏| 天气| 辛集市| 民和| 南陵县| 南岸区| 柞水县| 湟源县| 饶平县| 普兰店市| 新闻| 板桥市| 林州市| 兴海县| 丹江口市| 永靖县| 浦东新区|