SpringBoot3集成WebSocket

標簽:WebSocket,Session,Postman。

一、簡介

WebSocket通過一個TCP連接在客戶端和服務器之間建立一個全雙工、雙向的通信通道,使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據,在WebSocket的API中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,并進行雙向數據傳輸。

基于Postman工具的WebSocket交互

Connected to ws://127.0.0.1:8088/web/socket/msgHandshake Details
Request URL: http://127.0.0.1:8088/web/socket/msg
Request Method: GET
Status Code: 101 Request Headers
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: 5Qrs8JeRLsiY9G/PRJUocQ==
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Host: 127.0.0.1:8088Response Headers
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Accept: E3aFw2bBzxByPCynmQ7lZ+7BgsU=
Sec-WebSocket-Extensions: permessage-deflate;client_max_window_bits=15

二、工程搭建

1、工程結構

2、依賴管理

starter-websocket的依賴中,涉及到spring框架中兩個關系較為密切的組件,分別是websocketmessaging組件。

<!--WebSocket-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><version>${spring-boot.version}</version>
</dependency>

三、WebSocket用法

1、示意圖

在下面的案例中,大致模擬這樣一個流程,三個客戶端分別和服務端建立連接,然后進行客戶端之間的會話通信。

2、API參考

這里通過4個核心的方法注解,分別處理會話的不同動作,比如連接的建立和關閉,通信交互和錯誤處理;在實際的應用場景中,需要在通信方法中設計更多的指令來應對不同的業務場景。

@ServerEndpoint("/web/socket/msg")
public class MsgWebSocket {private static final  ConcurrentHashMap<String,Session> sessions = new ConcurrentHashMap<>();private static final AtomicInteger onlineCount = new AtomicInteger(0);/*** 建立連接調用的方法*/@OnOpenpublic void onOpen(Session session) {String userId = session.getRequestParameterMap().get("userId").get(0);// 加入Set中sessions.put(userId,session);// 在線數增加onlineCount.getAndIncrement();log.info("session-{},online-count-{}",session.getId(),onlineCount.get());}/*** 客戶端消息處理的方法*/@OnMessagepublic void sendMsg(Session sender,String message) throws Exception {MsgDTO dto = JSONUtil.toBean(message, MsgDTO.class);Session receiver = sessions.get(dto.getUserId());if (receiver != null) {receiver.getBasicRemote().sendText(dto.getMsg());}}/*** 關閉連接調用的方法*/@OnClosepublic void onClose(Session session) {String userId = session.getRequestParameterMap().get("userId").get(0);// 從Set中刪除sessions.remove(userId);// 在線數減少onlineCount.getAndDecrement();log.info("session-{},down-line-count-{}",session.getId(),onlineCount.get());}/*** 發生錯誤調用的方法*/@OnErrorpublic void onError(Session session, Throwable throwable) throws Exception {log.error("Web Stock Error", throwable);session.getBasicRemote().sendText(throwable.getMessage());}
}

測試效果圖:注意這里使用的是postman最新版本。

四、源碼參考

文檔倉庫:
https://gitee.com/cicadasmile/butte-java-note源碼倉庫:
https://gitee.com/cicadasmile/butte-spring-parent

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13457.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13457.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13457.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

003_PyCharm的安裝與使用

如果你正在學習PyQt&#xff0c;本系列教程完全可以帶你入門直至入土。 所謂從零開始&#xff0c;就是從軟件安裝、環境配置開始。 不跳過一個細節&#xff0c;不漏掉一行代碼&#xff0c;不省略一個例圖。 IDE 開始學習一個編程語言&#xff0c;我們肯定是首先得安裝好它&…

std::funture和std::promise

#include <iostream> #include <thread> #include <future>void calculateResult(std::promise<int>& promiseObj) {// 模擬耗時計算std::this_thread::sleep_for(std::chrono::seconds(2));// 設置結果到 promise 中promiseObj.set_value(42); }i…

信息系統項目管理師——十大管理過程輸入、工具和技術、輸出(論文篇)二

六、項目風險管理 規劃風險管理 在撰寫關于“規劃風險管理”的論文時&#xff0c;這個過程是項目風險管理的第一步&#xff0c;旨在建立風險管理的框架&#xff0c;為整個項目周期內的風險識別、分析、應對和監控奠定基礎。以下是規劃風險管理過程中可能涉及的輸入、工具和技…

Python學習(五)異常處理

異常概念 異常的捕獲方法 try: f open("D:/abc.txt","r",encoding"UTF-8") except: print("出現異常了&#xff0c;因為文件不存在&#xff0c;我將open的模式&#xff0c;改為w模式去打開") f open("D:/abc.txt&qu…

Python代碼:十、字符串連接

1、題目 小明有兩個最好的朋友&#xff0c;他們的名字分別用input讀入記錄在兩個字符串中&#xff0c;請使用字符串連接&#xff08;&#xff09;幫助牛牛將兩個朋友的名字依次連接在一個字符串中輸出。 2、代碼 import sysstr1 input() str2 input() str3 str1 str2 pr…

從0到1:使用HuggingFace的管線加載Diffusion模型生成第一張圖像!

Hugging Face系列1&#xff1a;詳細剖析Hugging Face網站資源 前言本篇摘要1. Hugging Face Hub三大件1.1 模型1.1.1 模型簡介1.1.2 制作模型卡片1.1.3 模型下載和上傳1.1.4 模型應用 1.2 數據集1.2.1 數據集簡介1.2.2 調用代碼1.2.3 AutoTrain在線微調 1.3 Space應用1.3.1 內容…

理解 Python 中的 `super()` 與 `__init__()` 方法

在 Python 的面向對象編程中&#xff0c;super() 函數和 __init__() 方法是兩個非常重要的概念。它們在類的繼承和初始化過程中扮演著關鍵的角色。本文將深入探討這兩個概念的工作原理&#xff0c;并通過示例代碼來展示它們的使用。 基本原理 __init__() 方法 __init__() 是…

Vue中的全局事件總線:EventBus與$bus的比較詳解與實戰應用

EventBus實例&#xff1a; var EventBus new Vue() 會創建一個名為EventBus的Vue實例&#xff0c;并將其存儲在變量EventBus中。Vue.prototype.$bus new Vue() 則直接在Vue的原型上創建一個新的Vue實例&#xff0c;并將其賦值給$bus屬性。 使用方式&#xff1a; var EventBus…

C# 結合 JavaScript 對 Web 控件進行數據輸入驗證

目錄 關于數據驗證 范例運行環境 驗證設計 JavaScript 方法 設計 實現 調用示例 C# 方法 設計 實現 調用示例 小結 關于數據驗證 在 Web 應用的錄入界面&#xff0c;數據驗證是一項重要的實現功能&#xff0c;數據驗證是指確認 Web 控件輸入或選擇的數據&#xff…

類對象作為類成員

在C中&#xff0c;類對象可以作為另一個類的成員變量。這種設計方式可以用于創建復雜的對象結構&#xff0c;使得一個類的對象能夠包含另一個類的對象。這種嵌套類的組合方式可以增強代碼的可重用性和模塊化。 類對象作為類成員的示例 讓我們通過一個示例來解釋這一概念。假設…

武漢信息系統建設和服務能力評估CS認證咨詢

很多企業在咨詢信息系統建設和服務能力評估的時候喜歡百度搜索&#xff0c;不管是本地咨詢機構還是外地咨詢機構只要價格便宜就找誰&#xff0c;這個在低等級的CS1是可以這么操作的&#xff0c;一旦上升到CS2級別及以上的&#xff0c;我們一般不推薦找外地咨詢機構&#xff0c;…

【文末附gpt升級方案】字節跳動發布豆包大模型:AI領域的革新與引領

隨著科技的飛速進步&#xff0c;人工智能&#xff08;AI&#xff09;已逐漸成為推動社會發展的重要力量。在這一背景下&#xff0c;字節跳動公司以其前瞻性的眼光和創新能力&#xff0c;于XXXX年XX月XX日正式發布了豆包大模型&#xff0c;這一舉動無疑在AI領域掀起了新一輪的浪…

C語言.動態內存管理

動態內存管理 1.為什么要有動態內存分配2.malloc和free2.1malloc2.2free 3.calloc和realloc3.1calloc3.2realloc 4.常見的動態內存管理的錯誤4.1對NULL指針解引用操作4.2對動態開辟空間的越界訪問4.3對非動態開辟內存使用free釋放4.4使用free釋放一塊動態開辟內存的一部分4.5對…

軍訓中的美差

大學時候的軍訓是在二年級秋季開學前進行的&#xff0c;地點是在河北的某部隊。 軍訓時候的分班是按照學號重新劃分的&#xff0c;我的學號在大學宿舍八個人中排最后&#xff0c;恰好就和其他宿舍的人分在了一個班。訓練正步走的時候&#xff0c;站在我左邊的那個哥們&#xf…

Signal 即將成為JavaScript的一部分

什么是響應性&#xff1f; 在過去的幾年中&#xff0c;響應性成為了所有現代前端框架以及React庫的核心。 對于不熟悉前端開發的人來說&#xff0c;起初這可能是一個令人困惑的概念&#xff0c;因為它改變了常規的、自上而下的、從調用者到被調用者的順序工作流。 在響應性范…

AR系列路由器配置VLAN間通信

AR路由器是華為公司推出的企業級路由器產品系列&#xff0c;具有高可靠性、高性能和易管理等特點。AR 系列路由器提供的功能包括路由轉發、安全接入、語音、視頻、無線等多種業務&#xff0c;支持各種接入方式和協議&#xff0c;并且可以方便地進行擴展和升級。 實驗拓撲圖&…

微信小程序介紹

一、微信小程序概述 微信小程序是一種不需要下載、安裝即可使用的應用&#xff0c;用戶只需掃一掃或搜一下即可打開。它實現了應用觸手可及的夢想&#xff0c;降低了應用的使用門檻。微信小程序自2017年1月上線以來&#xff0c;已經吸引了大量開發者加入&#xff0c;構建了一個…

【全開源】云界旅游微信小程序(源碼搭建/上線/運營/售后/維護更新)

開啟您的云端旅行新體驗 一、引言 在快節奏的現代生活中&#xff0c;旅行成為了人們放松身心、探索世界的重要方式。讓您的旅行更加便捷、高效&#xff0c;打造了云界旅游小程序&#xff0c;帶您領略云端旅行的無限魅力。 二、小程序功能概覽 云界旅游小程序集成了豐富的旅游…

【代碼隨想錄算法訓練營第37期 第九天 | LeetCode28. 實現 strStr()、459.重復的子字符串】

代碼隨想錄算法訓練營第37期 第九天 | LeetCode28. 實現 strStr()、459.重復的子字符串 一、28. 實現 strStr() 解題代碼C&#xff1a; class Solution { public:void getNext(int* next, const string& s) {int j 0;next[0] 0;for(int i 1; i < s.size(); i) {whi…

【Maven】Nexus私服簡介_下載安裝_登錄

1、簡介 1.1介紹 Nexus私服&#xff0c;也被稱為Maven倉庫管理器&#xff0c;是許多公司在自己的局域網內搭建的遠程倉庫服務器。提供了強大的倉庫管理功能和構件搜索功能&#xff0c;使得開發人員能夠更方便地管理和使用Maven項目中的依賴庫。 1.2作用 內網訪問&#xff1…