Spring Boot WebSocket 客戶端

介紹

WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議,它可以提供實時的、雙向的數據傳輸。Spring Boot 提供了對 WebSocket 的支持,我們可以使用 Spring Boot WebSocket 客戶端來連接到 WebSocket 服務器,并進行實時通信。

本文將介紹如何使用 Spring Boot WebSocket 客戶端來連接到 WebSocket 服務器,并發送和接收消息。我們將通過一個簡單的聊天應用案例來演示 Spring Boot WebSocket 客戶端的使用。

創建 Spring Boot 項目

首先,我們需要創建一個 Spring Boot 項目。可以使用 Spring Initializr(https://start.spring.io/)來快速創建一個空的 Spring Boot 項目。

在創建項目時,需要添加以下依賴:

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

這些依賴將引入 Spring Boot WebSocket 和 Web 相關的功能。

創建 WebSocket 客戶端

接下來,我們需要創建一個 WebSocket 客戶端來連接到 WebSocket 服務器。可以創建一個 WebSocketClient 的實例,并使用 WebSocketClient 來連接到 WebSocket 服務器。

@Configuration
@EnableWebSocket
public class WebSocketClientConfig {@Beanpublic WebSocketClient webSocketClient() {return new StandardWebSocketClient();}@Beanpublic WebSocketHandler webSocketHandler() {return new MyWebSocketHandler();}
}

在上面的示例中,我們使用了 StandardWebSocketClient 作為 WebSocket 客戶端的實現。可以根據需求選擇其他的 WebSocket 客戶端實現。

接下來,我們需要創建一個 WebSocket 處理器(WebSocketHandler)來處理 WebSocket 事件。可以實現 WebSocketHandler 接口,并重寫其中的方法。

public class MyWebSocketHandler implements WebSocketHandler {@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {// 連接建立后的處理邏輯}@Overridepublic void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {// 接收到消息的處理邏輯}@Overridepublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {// 發生傳輸錯誤的處理邏輯}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {// 連接關閉后的處理邏輯}@Overridepublic boolean supportsPartialMessages() {return false;}
}

在上面的示例中,我們實現了 WebSocketHandler 接口,并重寫了其中的方法。afterConnectionEstablished 方法在 WebSocket 連接建立后被調用,handleMessage 方法在接收到消息時被調用,handleTransportError 方法在發生傳輸錯誤時被調用,afterConnectionClosed 方法在連接關閉后被調用。supportsPartialMessages 方法用于指示是否支持部分消息的處理。

連接到 WebSocket 服務器

在上面的示例中,我們已經定義了 WebSocket 客戶端和 WebSocket 處理器。現在,我們需要創建一個類來連接到 WebSocket 服務器,并發送和接收消息。

@Component
public class WebSocketClientService {private final WebSocketClient webSocketClient;private final WebSocketHandler webSocketHandler;@Autowiredpublic WebSocketClientService(WebSocketClient webSocketClient, WebSocketHandler webSocketHandler) {this.webSocketClient = webSocketClient;this.webSocketHandler = webSocketHandler;}public void connect() {try {WebSocketSession session = webSocketClient.doHandshake(webSocketHandler, "ws://localhost:8080/ws").get();// 連接建立后的邏輯} catch (Exception e) {e.printStackTrace();}}public void sendMessage(String message) {// 發送消息的邏輯}public void disconnect() {// 斷開連接的邏輯}
}

在上面的示例中,我們使用 WebSocketClientWebSocketHandler 的實例來連接到 WebSocket 服務器,并發送和接收消息。在 connect 方法中,我們調用 doHandshake 方法來建立 WebSocket 連接。在 sendMessage 方法中,我們可以調用 session.sendMessage 方法來發送消息。在 disconnect 方法中,我們可以調用 session.close 方法來斷開連接。

使用 WebSocket 客戶端

在上面的示例中,我們已經創建了一個 WebSocket 客戶端,并定義了連接、發送和接收消息的方法。現在,我們可以在任何需要使用 WebSocket 客戶端的地方注入 WebSocketClientService 并調用其方法來連接、發送和接收消息。

@Controller
public class HomeController {private final WebSocketClientService webSocketClientService;@Autowiredpublic HomeController(WebSocketClientService webSocketClientService) {this.webSocketClientService = webSocketClientService;}@GetMapping("/")public String home() {webSocketClientService.connect();return "home";}@PostMapping("/send")public String sendMessage(@RequestParam String message) {webSocketClientService.sendMessage(message);return "home";}@PostMapping("/disconnect")public String disconnect() {webSocketClientService.disconnect();return "home";}
}

在上面的示例中,我們定義了一個控制器(HomeController),并注入了 WebSocketClientService。在 home 方法中,我們調用 webSocketClientService.connect 方法來連接到 WebSocket 服務器。在 sendMessage 方法中,我們調用 webSocketClientService.sendMessage 方法來發送消息。在 disconnect 方法中,我們調用 webSocketClientService.disconnect 方法來斷開連接。

測試 WebSocket 客戶端

在上面的示例中,我們已經創建了一個 WebSocket 客戶端,并定義了連接、發送和接收消息的方法。現在,我們可以運行項目并使用瀏覽器來測試 WebSocket 客戶端。

  1. 啟動 Spring Boot 項目。
  2. 在瀏覽器中訪問 http://localhost:8080/
  3. 在頁面上填寫要發送的消息并點擊發送按鈕。
  4. 在控制臺中可以看到 WebSocket 客戶端接收到的消息。

案例

以下是三個使用 Spring Boot WebSocket 客戶端的案例。

案例一:實時股票行情
假設我們需要實時獲取股票行情數據,并在前端展示。我們可以使用 Spring Boot WebSocket 客戶端來連接到股票行情 WebSocket 服務器,并定時發送請求,獲取最新的股票行情數據。

在 WebSocket 處理器中,我們可以實現 afterConnectionEstablished 方法來發送請求,實現定時獲取股票行情數據的邏輯。在 handleMessage 方法中,我們可以處理收到的股票行情數據,例如將其發送給前端頁面進行展示。

案例二:實時多人游戲
假設我們正在開發一個實時多人游戲,需要在多個玩家之間進行實時通信。我們可以使用 Spring Boot WebSocket 客戶端來連接到游戲服務器,并發送和接收游戲相關的消息。

在 WebSocket 處理器中,我們可以實現 afterConnectionEstablished 方法來發送玩家加入游戲的請求,實現玩家加入游戲的邏輯。在 handleMessage 方法中,我們可以處理接收到的游戲相關的消息,例如更新玩家位置、處理游戲事件等。

案例三:實時聊天應用
假設我們正在開發一個實時聊天應用,需要實現多個用戶之間的實時通信。我們可以使用 Spring Boot WebSocket 客戶端來連接到聊天服務器,并發送和接收聊天消息。

在 WebSocket 處理器中,我們可以實現 afterConnectionEstablished 方法來發送用戶加入聊天室的請求,實現用戶加入聊天室的邏輯。在 handleMessage 方法中,我們可以處理接收到的聊天消息,例如將其發送給其他在線用戶進行實時聊天。

這些案例只是示例,實際應用中可能還有其他的業務邏輯和需求。使用 Spring Boot WebSocket 客戶端,我們可以方便地連接到 WebSocket 服務器,并進行實時通信,滿足各種實時應用的需求。

總結

本文介紹了如何使用 Spring Boot WebSocket 客戶端來連接到 WebSocket 服務器,并發送和接收消息。我們通過一個簡單的聊天應用案例演示了 Spring Boot WebSocket 客戶端的使用。通過注入 WebSocketClientWebSocketHandler 的實例,我們可以在任何需要使用 WebSocket 客戶端的地方連接到 WebSocket 服務器,并進行實時通信。希望本文對你在使用 Spring Boot WebSocket 客戶端時有所幫助。

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

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

相關文章

python-選擇排序

選擇排序是一種簡單直觀的排序算法&#xff0c;它的基本思想是每一輪選擇未排序部分的最小元素&#xff0c;然后將其放到已排序部分的末尾。這個過程持續進行&#xff0c;直到整個數組排序完成。(重點&#xff1a;通過位置找元素) 以下是選擇排序的詳細步驟和 Python 實現&…

HarmonyOS應用開發實戰—登錄頁面【ArkTS】

文章目錄 本頁面實戰效果預覽圖一.HarmonyOS應用開發1.1HarmonyOS 詳解1.2 ArkTS詳解二.HarmonyOS應用開發實戰—登錄頁面【ArkTS】2.1 ArkTS頁面源碼2.2 代碼解析2.3 心得本頁面實戰效果預覽圖 一.HarmonyOS應用開發 1.1HarmonyOS 詳解 HarmonyOS(鴻蒙操作系統)是華為公司…

小程序首頁白屏優化,并舉例說明

小程序首頁白屏優化 小程序首頁白屏優化是指在用戶進入小程序首頁時&#xff0c;能夠盡快展示內容&#xff0c;避免出現長時間的白屏加載狀態&#xff0c;提升用戶體驗。以下是一些常見的小程序首頁白屏優化方法&#xff1a; 減少首屏請求&#xff1a;盡量減少首頁需要請求的資…

js粒子效果(一)

效果: 代碼: <!doctype html> <html> <head><meta charset"utf-8"><title>HTML5鼠標經過粒子散開動畫特效</title><style>html, body {position: absolute;overflow: hidden;margin: 0;padding: 0;width: 100%;height: 1…

DELL MD3600F存儲重置管理軟件密碼

注意&#xff1a;密碼清除可能會導致業務秒斷&#xff0c;建議非業務時間操作 針對一臺控制器操作即可&#xff0c;另一控制器會同步操作 重置后密碼為空&#xff01; 需求&#xff1a;重置存儲管理軟件密碼 管理軟件中分配物理磁盤時提示輸入密碼(類似是否了解風險確認操作的提…

華為OD機試 - 二叉樹計算(Java JS Python C)

目錄 題目描述 輸入描述 輸出描述 用例 題目解析 JS算法源碼 Java算法源碼

io.lettuce.core.RedisCommandExecutionException

io.lettuce.core.RedisCommandExecutionException: ERR invalid password ERR invalid password-CSDN博客 io.lettuce.core.RedisCommandExecutionException /** Copyright 2011-2022 the original author or authors.** Licensed under the Apache License, Version 2.0 (the…

Rust UI開發(一):使用iced構建UI時,如何在界面顯示中文字符

注&#xff1a;此文適合于對rust有一些了解的朋友 iced是一個跨平臺的GUI庫&#xff0c;用于為rust語言程序構建UI界面。 iced的基本邏輯是&#xff1a; UI交互產生消息message&#xff0c;message傳遞給后臺的update&#xff0c;在這個函數中編寫邏輯&#xff0c;然后通過…

2023-11-24--oracle--實驗--[Merge 語句]

oracle--實驗---Merge語句 1.認知Merge 語句 ? merge 語句是 sql 語句的一種。在 SQL server 、 Oracle 數據庫中可用&#xff0c; MySQL 中不可用。 ? merge 用來合并 update 和 insert 語句。目的&#xff1a;通過 merge 語句&#xff0c;根據一張表&#xff08; 原數據表…

IOS免簽封裝打包蘋果APP的方法

IOS免簽app封裝打包蘋果APP的方法如下&#xff1a; 準備一個未簽名的IPA文件。獲取一個企業證書或個人證書&#xff0c;用于簽名IPA文件。將證書添加到Keychain Access中。安裝iOS App Signer&#xff08;可以在網上找到相關下載鏈接&#xff09;。打開iOS App Signer&#xf…

AT360-6T GNSS 單頻高精度授時模塊特性參數

AT360-6T 模塊具有高靈敏度、低功耗、低cost等優勢&#xff0c;可以滿足電力授時&#xff0c;通信授時等領域的應用。AT360-6T特點&#xff1a; 1.支持北斗二代/北斗三代信號 2.高精度授時 3.可靠性授時 實時高精度授時 AT360-6T 系列模塊的授時秒脈沖抖動可以達到 10ns&am…

Vue學習筆記-搭建Vuex

1.概念 在Vue實現集中式狀態&#xff08;數據&#xff09;管理的一個插件&#xff0c;對Vue中多個組件的共享狀態進行集中式的管理&#xff08;讀/寫&#xff09;&#xff0c;也是一種組件間的通信方式&#xff0c;適用于任意組件間的通信 2.使用場景 多個組件需要共享數據時…

Mysql存儲引擎分類

Mysql存儲引擎分類&#xff1a; 在選擇存儲引擎時&#xff0c;應該根據應用系統的特點選擇合適的存儲引擎。對于復雜的應用系統&#xff0c;還可以根據實際情況選擇多種存儲引擎進行組合。 InnoDB: 是Mysql的默認存儲引擎&#xff0c;支持事務、外鍵。如果應用對事務的完整性有…

杰發科技AC7801——ADC軟件觸發的簡單使用

前言 7801資料讀起來不是很好理解&#xff0c;大概率是之前MTK的大佬寫的。在此以簡單的方式進行描述。我們做一個簡單的規則組軟件觸發Demo。因為規則組通道只有一個數據寄存器&#xff0c;因此還需要用上DMA方式搬運數據到內存。 AC7801的ADC簡介 7801的ADC是一種 12 位 逐…

一文學會qml自定義組件

文章目錄 最簡單的自定義控件:自定義按鈕組件添加自定義信號在QML中,自定義組件通常是通過創建一個新的QML文件來實現的,這個文件定義了組件的屬性、信號、槽以及界面。你可以將這個組件看作是一個可重用的模塊,它可以在不同的QML場景中使用,而不需要重復編寫代碼。 以下…

洛谷P1157組合的輸出 遞歸:我他又來辣

沒沒沒沒沒沒沒錯&#xff0c;這是一道簡單的遞歸&#xff08;其實是深搜加回溯) 我不管&#xff0c;我說是遞歸就是遞歸。 上題干&#xff1a; 題目描述 排列與組合是常用的數學方法&#xff0c;其中組合就是從 n 個元素中抽出 r個元素&#xff08;不分順序且 r≤n&#x…

查swap內存使用

查詢linux的swap被什么使用了 查詢centos的swap被什么進程使用了 swap內存被什么程序占用&#xff0c;什么程序使用了swap分區&#xff0c;占用swap內存的進程 查系統使用swap內存前10個進程&#xff1a; for i in $( cd /proc;ls |grep "^[0-9]"|awk $0 >10…

大數據技術之數據安全與網絡安全——CMS靶場實訓

大數據技術之數據安全與網絡安全——CMS靶場實訓 在當今數字化時代&#xff0c;大數據技術的迅猛發展帶來了前所未有的數據增長&#xff0c;同時也催生了對數據安全和網絡安全的更為迫切的需求。本篇博客將聚焦于大數據技術背景下的數據安全與網絡安全&#xff0c;并通過CMS&a…

C語言-指針講解(3)

文章目錄 1.字符指針變量1.1 字符指針變量類型是什么1.2字符指針變量的兩種使用方法&#xff1a;1.3字符指針筆試題講解1.3.1 代碼解剖 2.數組指針變量2.1 什么是數組指針2.2 數組指針變量是什么&#xff1f;2.2.3 數組指針變量的舉例 2.3數組指針和指針數組的區別是什么&#…

npm ERR! node-sass@4.13.0 postinstall: `node scripts/build.js`

npm ERR! node-sass4.13.0 postinstall: node scripts/build.js npm config set sass_binary_sitehttps://npm.taobao.org/mirrors/node-sass npm install npm run dev Microsoft Windows [版本 10.0.19045.2965] (c) Microsoft Corporation。保留所有權利。C:\Users\Administr…