通過Spring Boot集成WebSocket進行消息通信

文章目錄

    • 通過Spring Boot集成WebSocket進行消息通信
      • 1. 創建 Spring Boot 項目
      • 2. 添加 WebSocket 依賴
      • 3. 配置 WebSocket
      • 4. 創建 WebSocket 處理器
      • 5. 創建控制器(可選)
      • 6. 前端頁面測試
      • 7. 運行項目
      • 注意事項

通過Spring Boot集成WebSocket進行消息通信

1. 創建 Spring Boot 項目

你可以通過 Spring Initializr(https://start.spring.io/ )創建一個新的 Spring Boot 項目,添加 Spring WebSpring Boot DevTools 依賴,同時也可以添加 Lombok 依賴來簡化代碼。

2. 添加 WebSocket 依賴

pom.xml 中添加 Spring Boot WebSocket 相關依賴:

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

3. 配置 WebSocket

創建一個配置類來配置 WebSocket 端點和攔截器(可選):

import org.springframework.context.annotation.Bean;
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;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(myHandler(), "/ws").setAllowedOrigins("*");}@Beanpublic MyWebSocketHandler myHandler() {return new MyWebSocketHandler();}@Beanpublic ServletServerContainerFactoryBean createWebSocketContainer() {ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();container.setMaxTextMessageBufferSize(8192);container.setMaxBinaryMessageBufferSize(8192);return container;}
}

4. 創建 WebSocket 處理器

創建一個類來處理 WebSocket 連接、消息接收和關閉等事件:

import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.io.IOException;public class MyWebSocketHandler extends TextWebSocketHandler {@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {String payload = message.getPayload();// 處理接收到的消息session.sendMessage(new TextMessage("Server received: " + payload));}@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {// 連接建立后的處理邏輯session.sendMessage(new TextMessage("Connection established"));}@Overridepublic void afterConnectionClosed(WebSocketSession session, int statusCode, String reason) throws Exception {// 連接關閉后的處理邏輯}
}

5. 創建控制器(可選)

如果你需要通過 HTTP 請求來觸發一些與 WebSocket 相關的操作,可以創建一個控制器:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class WebSocketController {@GetMapping("/test")public String test() {return "WebSocket test";}
}

6. 前端頁面測試

創建一個簡單的 HTML 頁面來測試 WebSocket 連接:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>WebSocket Test</title>
</head>
<body><input type="text" id="messageInput" placeholder="Enter message"><button onclick="sendMessage()">Send</button><div id="output"></div><script>var socket = new WebSocket('ws://localhost:8080/ws');socket.onopen = function(event) {document.getElementById('output').innerHTML += '<p>Connected</p>';};socket.onmessage = function(event) {document.getElementById('output').innerHTML += '<p>' + event.data + '</p>';};socket.onclose = function(event) {document.getElementById('output').innerHTML += '<p>Disconnected</p>';};function sendMessage() {var message = document.getElementById('messageInput').value;if (message) {socket.send(message);document.getElementById('messageInput').value = '';}}</script>
</body>
</html>

7. 運行項目

啟動 Spring Boot 項目,然后在瀏覽器中打開 HTML 頁面。你可以在輸入框中輸入消息并點擊發送按鈕,查看與服務器的 WebSocket 通信情況。

注意事項

  • 確保你的服務器端口(默認為 8080)沒有被其他應用程序占用。
  • 在生產環境中,需要考慮 WebSocket 的安全性,如使用 SSL/TLS 加密連接。

通過以上步驟,你就可以在 Spring Boot 項目中成功集成 WebSocket 并實現基本的消息通信功能。

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

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

相關文章

rust服務應用開發框架

原文鏈接:https://i68.ltd/notes/posts/20250313-rust-wasm-fw/ spin 開源開發工具&#xff0c;用于構建和運行由 WebAssembly 提供支持的無服務器應用程序Spin 是一個框架&#xff0c;用于使用 WebAssembly 構建&#xff0c;部署和運行快速&#xff0c;安全和可組合的云端微…

迷茫的一周 2025/3/28

Java篇 在Java中&#xff0c;以下數據類型中,需要內存最多的是(long) - A選項byte&#xff1a;占用1個字節&#xff08;8位&#xff09; - B選項long&#xff1a;占用8個字節&#xff08;64位&#xff09; - C選項Object&#xff1a;Object本身是一個引用&#xff0c;在32位JVM…

Elasticsearch 的搜索功能

Elasticsearch 的搜索功能 建議閱讀順序&#xff1a; Elasticsearch 入門Elasticsearch 搜索&#xff08;本文&#xff09;Elasticsearch 搜索高級Elasticsearch 高級 1. 介紹 使用 Elasticsearch 最終目的是為了實現搜索功能&#xff0c;現在先將文檔添加到索引中&#xff0c…

docker鏡像拉取失敗

hub.docker.com中提供的docker pull命令在服務器拉取鏡像時報錯Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 這個錯誤通常表明Docker客戶…

EFISH-SBC-RK3576 + 5G模組:無線工業相機與分布式AI質檢?

在智能制造與倉儲物流場景中&#xff0c;傳統有線工業相機存在部署成本高、靈活性差等痛點。?eFish-SBC-RK3576? 通過 ?5G無線傳輸 分布式NPU協同?&#xff0c;實現跨產線、跨工廠的AI質檢系統&#xff0c;檢測效率提升300%&#xff0c;布線復雜度降低90%。 ?1. 系統架構…

AI提示詞編寫方法全解析

在人工智能日益融入生活的當下&#xff0c;如何巧妙編寫提示詞&#xff0c;成為充分發揮AI效能的關鍵。以下為您詳細介紹幾種實用的AI提示詞編寫方法。 角色扮演法&#xff1a;賦予AI獨特身份 角色扮演法旨在讓AI模擬特定角色。當我們渴望AI以歷史人物、虛擬角色的視角進行表…

【docker】docker應用舉例

# Docker創建python項目 ## 1. 準備 Dockerfile 首先,在項目根目錄下創建一個 Dockerfile,用于定義 Docker 鏡像的構建步驟。 # 使用官方 Python 鏡像作為基礎鏡像 FROM python:3.9-slim # 設置工作目錄 WORKDIR /app # 復制項目文件到容器中 COPY . /app # 安裝項目依賴…

【大模型】SpringBoot整合LangChain4j實現RAG檢索實戰詳解

目錄 一、前言 二、LangChain4j 介紹 2.1 什么是LangChain4j 2.2 LangChain4j 主要特點 2.3 Langchain4j 核心組件 三、RAG介紹 3.1 什么是RAG 3.2 RAG工作流程 3.2.1 補充說明 3.3 Embedding模型 3.3.1 RAG實際使用步驟 3.3.2 什么是Embedding 3.3.3 Embedding 技…

基于 Trae 的超輕量級前端架構設計與性能優化實踐

一、技術背景與選型動因 在單頁應用(SPA)復雜度指數級增長的今天&#xff0c;傳統框架在千級列表渲染場景下普遍存在首屏延遲(>1.5s)、內存占用過高(>200MB)等問題。基于對 Webpack Bundle Analyzer 的長期觀察&#xff0c;我們發現核心問題集中在&#xff1a; ? 類組件…

dotnet core web api linux主機公網發布

效果: 發布流程: 創建一個ASP.NET Core Web API 工程 輸入工程名 選擇框架版本為.net 9.0及選擇配置HTTPS和啟用OPENAPI 啟動調試 確認證書

WPS宏開發手冊——JSA語法練習

目錄 系列文章3、JSA語法練習3.1、運算練習3.2、比較練習3.3、if else練習3.4、for 練習3.5、字符串、數組方法練習3.6、語義轉編程練習題 系列文章 使用、工程、模塊介紹 JSA語法 JSA語法練習題 Excel常用Api 后續EXCEL實戰、常見問題、顏色附錄&#xff0c;持…

計算機網絡面經(一)

以下為個人總結&#xff0c;圖源大部分會來自網絡和JavaGuide 網絡分層模型 OSI七層模型 各層的常見協議 應用層 用戶接口 HTTP, FTP, SMTP, DNS表示層 數據格式轉換 SSL/TLS, JSON, JPEG會話層 會話管理 NetBIOS, RPC, SSH傳輸層 端到端通信 TCP, UDP, QUIC網絡層 路由尋址…

《JVM考古現場(十四):混沌重啟——從量子永生到宇宙熱寂的終極編譯》

開篇&#xff1a;熵火燎原量子遞歸的終極突圍 "當《誅仙劍陣》的時空凍結算法遭遇量子遞歸暴走&#xff0c;當Project Omega的熱寂代碼在JVM的十三維堆內存中坍縮&#xff0c;此刻我們即將撕開歸墟晶壁&#xff0c;直面從玻爾茲曼大腦到馮諾依曼架構的終極對決&#xff0…

【django】2-2 (django配置) 數據庫配置、緩存配置

文章目錄 5 數據庫配置5.1 常用配置項5.2 數據庫配置示例5.3 其它數據庫配置選項 6 緩存6.1 常用配置項6.2 內置的緩存后端6.3 緩存配置示例6.4 緩存中間件的配置 創建django項目后&#xff0c;會自動生成初始的項目文件如下&#xff1a; manage.py # 管理django項目…

【博客】使用GithubAction自動同步obisidian和hexo倉庫

使用Github Action自動同步obisidian和hexo倉庫&#xff0c;避免手動操作。 本文首發于?慕雪的寒舍 1. 煩惱 先來說說慕雪現在的筆記和博客是怎么管理的吧&#xff0c;我正在使用兩套筆記軟件 思源筆記&#xff1a;私密性高一些&#xff0c;不是博客的筆記都在這里面。由于思…

scala簡介和基礎語法

Scala簡介 Scala 是一門多范式&#xff08;multi-paradigm&#xff09;的編程語言&#xff0c;設計初衷是要集成面向對象編程和函數式編程的各種特性。 Scala 運行在 Java 虛擬機上&#xff0c;并兼容現有的 Java 程序。Scala 源代碼被編譯成 Java 字節碼&#xff0c;所以它可…

7.4考研408數據結構B樹與B+樹專題深度解析

考研408數據結構B樹與B+樹專題深度解析 一、B樹(B-Tree) 1.1 定義與性質 定義: B樹是一種平衡多路查找樹,滿足以下條件: 階數:每個結點最多有 m m m個子樹( m ≥

WEB安全--RCE--RCE的危險函數

一、命令執行 1.1、命令執行原理 <?php $cmd $_GET[cmd]; // 直接獲取用戶輸入 system($cmd); // 不安全 ?>#payload: http://example.com/vuln.php?cmdwhoami#結果: www-data 1.2、危險函數 1.2.1、system() 介紹&#xff1a; 執行外部命令&#xff0c;將命令…

Linux C++ 利用 io_uring 技術批量讀取 tun 文件描述符的數據。

以下是參考的實現代碼&#xff0c;IO_URING 操作必須要進行按頁大小對齊&#xff08;僅在O_DIRECT直接I/O下&#xff09;&#xff0c;不能是非對稱的&#xff0c;一般大多數操作系統頁大小為&#xff1a;4KB。 批量讀取、writev 批量簡寫。 static constexpr int MTU ITap::M…

時序數據庫:InfluxDB命令行操作

學習 InfluxDB 的命令行操作至關重要&#xff0c;它不僅是與數據庫直接交互的工具&#xff0c;也是理解 InfluxDB 核心概念的關鍵途徑。通過命令行&#xff0c;用戶可以高效地執行數據庫管理、數據查詢和插入等任務&#xff0c;深入掌握 InfluxQL 的語法及功能。這對于調試、快…