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

SpringBoot 使用WebSocket功能(實(shí)現(xiàn)步驟)

 更新時(shí)間:2024年02月05日 09:42:18   作者:清山博客  
本文通過詳細(xì)步驟介紹了SpringBoot 使用WebSocket功能,首先需要導(dǎo)入WebSocket坐標(biāo),編寫WebSocket配置類,用于注冊(cè)WebSocket的Bean,結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

實(shí)現(xiàn)步驟:

1.導(dǎo)入WebSocket坐標(biāo)。

在pom.xml中增加依賴項(xiàng):

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

2.編寫WebSocket配置類,用于注冊(cè)WebSocket的Bean。

package com.rc114.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/**
 * WebSocket配置類,用于注冊(cè)WebSocket的Bean
 * @author Administrator
 */
@Configuration
public class WebSocketConfiguration {
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

3.編寫WebSocketServer類。

package com.rc114.websocket;
import jakarta.websocket.OnClose;
import jakarta.websocket.OnMessage;
import jakarta.websocket.OnOpen;
import jakarta.websocket.Session;
import jakarta.websocket.server.PathParam;
import jakarta.websocket.server.ServerEndpoint;
import org.springframework.stereotype.Component;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
 * WebSocket服務(wù)
 * @author Administrator
 */
@Component  //  交給spring容器管理
@ServerEndpoint("/ws/{sid}")    //  路徑請(qǐng)求
public class WebSocketServer {
    //存放會(huì)話對(duì)象
    private static Map<String, Session> sessionMap = new HashMap();
    /**
     * 連接建立成功調(diào)用的方法
     */
    @OnOpen
    public void onOpen(Session session, @PathParam("sid") String sid) {
        System.out.println("客戶端:" + sid + "建立連接");
        sessionMap.put(sid, session);
    }
    /**
     * 收到客戶端消息后調(diào)用的方法
     *
     * @param message 客戶端發(fā)送過來的消息
     */
    @OnMessage
    public void onMessage(String message, @PathParam("sid") String sid) {
        System.out.println("收到來自客戶端:" + sid + "的信息:" + message);
    }
    /**
     * 連接關(guān)閉調(diào)用的方法
     *
     * @param sid
     */
    @OnClose
    public void onClose(@PathParam("sid") String sid) {
        System.out.println("連接斷開:" + sid);
        sessionMap.remove(sid);
    }
    /**
     * 群發(fā)
     *
     * @param message
     */
    public void sendToAllClient(String message) {
        Collection<Session> sessions = sessionMap.values();
        for (Session session : sessions) {
            try {
                //服務(wù)器向客戶端發(fā)送消息
                session.getBasicRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

4.測(cè)試WebSocket

編寫一個(gè)測(cè)試WebSocket的html頁面:

<html>
<head>
    <title>WebSocket測(cè)試頁面</title>
    <style type="text/css">
        * {
            font-size: 14px;
            line-height: 22px;
        }
        .main {
            border: 0px solid #ccc;
            width: 60%;
            margin: 0 auto;
            padding: 10px;
        }
        .main-table {
            width: 100%;
            border: 1px solid #ccc;
            border-collapse: collapse;
        }
        .main-table td {
            border: 1px solid #ccc;
            padding: 5px;
        }
        .td-left {
            text-align: right;
        }
        input[type="text"] {
            border: 1px solid #ccc;
            padding: 5px;
            outline: none;
            width: 200px;
        }
        input[type="button"] {
            border: 1px solid #ccc;
            padding: 3px 10px;
            outline: none;
        }
        .green {
            color: green;
        }
        .red {
            color: red;
        }
        #msg {
            font-size: 12px;
            line-height: 22px;
        }
    </style>
</head>
<body>
    <div class="main">
        <table class="main-table">
            <tr>
                <td colspan="2" style=" text-align: center;font-weight: bold;">WebSocket測(cè)試</td>
            </tr>
            <tr>
                <td style="width: 100px;" class="td-left">服務(wù)器地址</td>
                <td><input type="text" id="server" value="ws://localhost:8080/ws/"></td>
            </tr>
            <tr>
                <td class="td-left">客戶端名稱</td>
                <td><input type="text" id="clientId">
                    <input type="button" value="隨機(jī)生成" onclick="GenerateClientId()" />
                </td>
            </tr>
            <tr>
                <td> </td>
                <td>
                    <input type="button" value="連接" onclick="ConnectServer()" />
                </td>
            </tr>
            <tr>
                <td class="td-left">連接狀態(tài)</td>
                <td> <span id="status"><span class='red'>未連接</span></span></td>
            </tr>
            <tr>
                <td class="td-left">發(fā)送消息</td>
                <td>
                    <input type="text" id="txt">
                </td>
            </tr>
            <tr>
                <td> </td>
                <td>
                    <input type="button" value="發(fā)送" onclick="SendMsg()" />
                    <input type="button" value="清空" onclick="ClearLog()" />
                </td>
            </tr>
            <tr>
                <td class="td-left">日志</td>
                <td>
                    <div id="msg"></div>
                </td>
            </tr>
        </table>
        <script type="text/javascript">
            var websocket = null;
            var clientId = "";
            //隨機(jī)生成客戶端編號(hào)
            function GenerateClientId() {
                clientId = Math.random().toString().substr(2);
                document.getElementById("clientId").value = clientId;
            }
            GenerateClientId();
            //連接到服務(wù)器
            function ConnectServer() {
                var clientId = document.getElementById("clientId").value;
                if (clientId == "") {
                    alert("客戶端編號(hào)不能為空!");
                } else {
                    if ("WebSocket" in window) {
                        websocket = new WebSocket("ws://localhost:8080/ws/" + clientId);
                        websocket.onerror = function () {
                            ShowMsg("<span class='red'>ERROR</span>");
                        }
                        websocket.onopen = function () {
                            document.getElementById("status").innerHTML = "<span class='green'>已連接</span>";
                            ShowMsg("<span class='green'>連接成功!</span>");
                        }
                        websocket.onmessage = function (event) {
                            ShowMsg(event.data);
                        }
                        websocket.onclose = function () {
                            ShowMsg("<span class='red'>斷開連接</span>");
                        }
                    }
                    else {
                        alert("NOT SUPPORT WEBSOCKET!");
                    }
                }
            }
            //網(wǎng)頁關(guān)閉時(shí),斷開鏈接
            window.onbeforeunload = function () {
                websocket.close();
            }
            //顯示日志
            function ShowMsg(msg) {
                document.getElementById("msg").innerHTML += Now() + " " + msg + "<br/>";
            }
            //發(fā)送消息
            function SendMsg() {
                var txt = document.getElementById("txt").value;
                websocket.send(txt);
                ShowMsg("<span class='green'>發(fā)送消息:" + txt + "</span>");
            }
            //斷開鏈接
            function closeWebSocket() {
                websocket.close();
            }
            function Now() {
                const date = new Date();
                const year = date.getFullYear();
                const month = (date.getMonth() + 1).toString().padStart(2, '0');
                const day = date.getDate().toString().padStart(2, '0');
                const hour = date.getHours().toString().padStart(2, '0');
                const minute = date.getMinutes().toString().padStart(2, '0');
                const second = date.getSeconds().toString().padStart(2, '0');
                const format = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
                return format;
            }
            //清空日志
            function ClearLog() {
                document.getElementById("msg").innerHTML = "";
            }
        </script>
    </div>
</body>
</html>

運(yùn)行效果:

注意:

如果使用了Nginx轉(zhuǎn)發(fā)請(qǐng)求的,需在Nginx配置WebSocket的轉(zhuǎn)發(fā)規(guī)則。

到此這篇關(guān)于SpringBoot 使用WebSocket功能的文章就介紹到這了,更多相關(guān)SpringBoot 使用WebSocket內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的@builder建造者模式詳細(xì)解析

    Java中的@builder建造者模式詳細(xì)解析

    這篇文章主要介紹了Java中的@builder建造者模式詳細(xì)解析,使用 @Builder 注解可以簡(jiǎn)化手動(dòng)編寫建造者模式的代碼,使代碼更加簡(jiǎn)潔易讀,它可以自動(dòng)生成鏈?zhǔn)秸{(diào)用的方法來設(shè)置對(duì)象的屬性,并且可以在需要時(shí)進(jìn)行可選屬性的設(shè)置,需要的朋友可以參考下
    2024-01-01
  • Nacos配置中心的配置文件的匹配規(guī)則及說明

    Nacos配置中心的配置文件的匹配規(guī)則及說明

    這篇文章主要介紹了Nacos配置中心的配置文件的匹配規(guī)則及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java?基于Hutool實(shí)現(xiàn)DES加解密示例詳解

    Java?基于Hutool實(shí)現(xiàn)DES加解密示例詳解

    這篇文章主要介紹了Java基于Hutool實(shí)現(xiàn)DES加解密,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • java使用DOM對(duì)XML文檔進(jìn)行增刪改查操作實(shí)例代碼

    java使用DOM對(duì)XML文檔進(jìn)行增刪改查操作實(shí)例代碼

    這篇文章主要介紹了java使用DOM對(duì)XML文檔進(jìn)行增刪改查操作實(shí)例代碼,實(shí)例涉及對(duì)xml文檔的增刪改查,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • IntelliJ IDEA 詳細(xì)圖解最常用的配置(適合剛剛用的新人)

    IntelliJ IDEA 詳細(xì)圖解最常用的配置(適合剛剛用的新人)

    這篇文章主要介紹了IntelliJ IDEA 詳細(xì)圖解最常用的配置,本篇教程非常適合剛剛用的新人,本文圖文并茂給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java開發(fā)模式的深度研究

    java開發(fā)模式的深度研究

    下面小編就為大家?guī)硪黄钊肜斫鈐ava工廠模式。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-07-07
  • Hadoop2.8.1完全分布式環(huán)境搭建過程

    Hadoop2.8.1完全分布式環(huán)境搭建過程

    本文搭建了一個(gè)由三節(jié)點(diǎn)(master、slave1、slave2)構(gòu)成的Hadoop完全分布式集群(區(qū)別單節(jié)點(diǎn)偽分布式集群),并通過Hadoop分布式計(jì)算的一個(gè)示例測(cè)試集群的正確性。對(duì)hadoop分布式環(huán)境搭建過程感興趣的朋友跟隨小編一起看看吧
    2019-06-06
  • java設(shè)計(jì)模式—靜態(tài)代理模式(聚合與繼承方式對(duì)比)

    java設(shè)計(jì)模式—靜態(tài)代理模式(聚合與繼承方式對(duì)比)

    下面小編就為大家?guī)硪黄猨ava設(shè)計(jì)模式—靜態(tài)代理模式(聚合與繼承方式對(duì)比)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java CAS基本實(shí)現(xiàn)原理代碼實(shí)例解析

    Java CAS基本實(shí)現(xiàn)原理代碼實(shí)例解析

    這篇文章主要介紹了Java CAS基本實(shí)現(xiàn)原理代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java在網(wǎng)頁上面抓取郵件地址的方法

    java在網(wǎng)頁上面抓取郵件地址的方法

    這篇文章主要介紹了java在網(wǎng)頁上面抓取郵件地址的方法,是比較典型的Java正則匹配應(yīng)用實(shí)例,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11

最新評(píng)論

永吉县| 福海县| 姜堰市| 巴青县| 德安县| 郴州市| 永州市| 临桂县| 郓城县| 岳普湖县| 马鞍山市| 嘉兴市| 湖口县| 陵川县| 纳雍县| 华亭县| 白水县| 周至县| 黄石市| 卢湾区| 彰化县| 大新县| 普兰店市| 苗栗县| 济南市| 定襄县| 新龙县| 萝北县| 纳雍县| 娄烦县| 桂平市| 孟连| 宁陕县| 灌云县| 仁怀市| 柘荣县| 阿图什市| 海晏县| 桐乡市| 谷城县| 新竹县|