通過IDEA寫一個服務端和一個客戶端之間的交互

服務端代碼:

WebSocketConfig代碼

package org.example.hufamessagedemo;import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.*;@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(new MessageHandler(), "/ws").setAllowedOrigins("*"); // 允許所有客戶端跨域連接}
}
MessageHandler代碼
package org.example.hufamessagedemo;import org.springframework.web.socket.*;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.util.concurrent.CopyOnWriteArrayList;public class MessageHandler extends TextWebSocketHandler {private static final CopyOnWriteArrayList<WebSocketSession> sessions = new CopyOnWriteArrayList<>();@Overridepublic void afterConnectionEstablished(WebSocketSession session) {sessions.add(session);System.out.println("新客戶端連接: " + session.getId());}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {System.out.println("收到消息: " + message.getPayload());// 廣播給所有客戶端for (WebSocketSession s : sessions) {if (s.isOpen()) {s.sendMessage(new TextMessage("用戶" + session.getId() + ": " + message.getPayload()));}}}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) {sessions.remove(session);System.out.println("客戶端斷開: " + session.getId());}
}
HufamessagedemoApplication代碼
package org.example.hufamessagedemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class HufamessagedemoApplication {public static void main(String[] args) {SpringApplication.run(HufamessagedemoApplication.class, args);}}

pom.xml代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>hufamessagedemo</artifactId><version>0.0.1-SNAPSHOT</version><name>hufamessagedemo</name><description>hufamessagedemo</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

客戶端代碼:

DemoApplication代碼
package com.example.demo;import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketHttpHeaders;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.client.WebSocketClient;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.net.URI;@SpringBootApplication
public class DemoApplication implements CommandLineRunner{public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@Overridepublic void run(String... args) throws Exception {WebSocketClient client = new StandardWebSocketClient();WebSocketHandler handler = new TextWebSocketHandler() {@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {System.out.println("? 已連接到服務端");session.sendMessage(new TextMessage("你好,我是客戶端!"));}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) {System.out.println("📩 收到服務端消息: " + message.getPayload());}};WebSocketHttpHeaders headers = new WebSocketHttpHeaders();// 這里傳 handler、headers、URIWebSocketSession session = client.execute(handler, headers, URI.create("ws://localhost:8080/ws")).get();// 再發一條消息session.sendMessage(new TextMessage("第二條消息 from client"));}
}

pom.xml代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>demo</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-websocket</artifactId></dependency><dependency><groupId>org.glassfish.tyrus.bundles</groupId><artifactId>tyrus-standalone-client</artifactId><version>2.1.3</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

客戶端端口8081,服務端端口8080.

效果圖:

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

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

相關文章

玩客云刷機Armbian + CasaOS,輕nas系統,以及擴展

網上太多的教程&#xff0c;綜合了一下&#xff0c;自己一邊參考一邊嘗試&#xff0c;昨天晚上做的&#xff0c;感覺今天快忘了&#xff0c;記錄一下&#xff0c;少走彎路。 隨著礦潮的退去&#xff0c;市場上涌現出了眾多所謂的“礦渣盒子”&#xff0c;這些設備往往因為價格低…

【Linux】環境變量與程序地址空間詳解

前言&#xff1a;歡迎各位光臨本博客&#xff0c;這里小編帶你直接手撕Linux程序地址空間&#xff0c;文章并不復雜&#xff0c;愿諸君耐其心性&#xff0c;忘卻雜塵&#xff0c;道有所長&#xff01;&#xff01;&#xff01;&#xff01; **&#x1f525;個人主頁&#xff1a…

機器學習 - Kaggle項目實踐(8)Spooky Author Identification 作者識別

Spooky Author Identification | Kaggle Approaching (Almost) Any NLP Problem on Kaggle &#xff08;參考&#xff09; Spooky Author Identification | Kaggle &#xff08;My work&#xff09; 根據三位的一些作品訓練集&#xff0c;三分類測試集是哪個作家寫的概率。 …

[frontend]WebGL是啥?

對于初學者來說&#xff0c;通常的建議是&#xff1a; 不要直接從原生 WebGL 開始&#xff0c;而是先使用一個基于 WebGL 的高級框架或庫&#xff0c;最著名的就是 Three.js。 webgl是啥 three.js是啥&#xff1f; Three.js 封裝了 WebGL 的復雜細節&#xff0c;提供了更簡單、…

[光學原理與應用-400]:設計 - 深紫外皮秒脈沖激光器 - 元件 - 聲光調制器AOM

聲光調制器&#xff08;Acousto-Optic Modulator, AOM&#xff09;是深紫外皮秒脈沖激光器中實現脈沖主動控制、頻率穩定及光束管理的核心元件。其通過聲波與光波的彈光相互作用&#xff0c;在皮秒時間尺度內實現激光強度、頻率或傳播方向的精準調制。以下從工作原理、關鍵性能…

25高教社杯數模國賽【D題頂流思路+問題分析】

注&#xff1a;本內容由”數模加油站“ 原創出品&#xff0c;雖無償分享&#xff0c;但創作不易。歡迎參考teach&#xff0c;但請勿抄襲、盜賣或商用。后續都在”數模加油站“......

利用 openssl api 實現 TLS 雙向認證

1. 環境 openssl1.1.1gwget https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1g/openssl-1.1.1g.tar.gz sha256 為&#xff1a; ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46Linux 環境 2. 靜態編譯 openssl tar -zxvf openssl-1.1.1…

低代碼開發平臺技術總結

一、 核心定義 低代碼開發平臺&#xff08;Low-Code Development Platform, LCDP&#xff09;是一種通過圖形化界面、可視化建模、拖拽組件和模型驅動邏輯來構建應用程序的開發環境。其核心目標是顯著減少傳統手寫代碼的數量&#xff0c;從而降低開發門檻&#xff0c;提升應用交…

Web與Nginx網站服務

文章目錄前言1、Web 概念1.1 Web 的特點1.2 B/S 架構模型1.3 Web 請求與響應過程1.4 靜態資源與動態資源1.5 Web 的發展階段1.6 小結2、HTTP 與 HTTPS 協議2.1 http與https區別2.2 HTTPS 握手流程2.3 HTTP狀態碼2.3.1 HTTP 狀態碼概覽2.3.2 常用狀態碼詳解3、Nginx 概念3.1 Ngi…

【算法--鏈表】25.K個一組翻轉鏈表--通俗講解

一、題目是啥?一句話說清 給你一個鏈表,每k個節點一組進行反轉,如果最后剩余的節點不足k個,則保持原狀。需要實際交換節點,而不僅僅是改變值。 示例: 輸入:head = [1,2,3,4,5], k = 2 輸出:[2,1,4,3,5](因為每2個一組反轉,最后剩余5不足2個,保持原狀) 二、解題核…

Git指令 | 個人學習筆記

主要包含git的日常核心操作。 1.創建新倉庫 創建新文件夾&#xff0c;打開&#xff0c;然后執行。 git init2.創建一個本地倉庫的克隆版本 先cd到指定的目錄下&#xff0c;再 git clone /path/to/respository # 指定遠程分支 git clone -b <分支名> <倉庫地址> …

Apache 的安裝及基本使用

1 Apache 簡介Apache HTTP Server&#xff08;通常簡稱 “Apache”&#xff09;是世界上最流行、歷史最悠久的開源 Web 服務器軟件之一&#xff0c;由 Apache 軟件基金會&#xff08;Apache Software Foundation&#xff09;維護。它的核心功能是接收客戶端&#xff08;如瀏覽器…

五大主流大語言模型(LLM)對比

文章目錄&#x1f916; 五大主流大型語言模型&#xff08;LLM&#xff09;對比1. ChatGPT (GPT-5) - OpenAI2. Claude 4 (Sonnet & Opus) - Anthropic3. Gemini 2.5 Pro - Google DeepMind4. Grok 4 - xAI5. DeepSeek R1 - 深度求索五款模型的綜合對比表&#x1f680; 該如…

redo log詳解

在 MySQL 中&#xff0c;Redo Log&#xff08;重做日志&#xff09; 是 InnoDB 存儲引擎實現事務持久性&#xff08;ACID 中的 D&#xff09; 的核心機制&#xff0c;同時也通過 “預寫日志&#xff08;Write-Ahead Logging, WAL&#xff09;” 策略提升了數據寫入性能。它記錄…

Linux awk命令完全指南:從原理到實戰,搞定文本處理難題

在Linux世界里&#xff0c;文本處理是運維、開發繞不開的日常——從分析日志、提取配置信息到統計數據&#xff0c;都需要高效的工具支撐。而awk&#xff0c;作為一款強大的文本分析語言&#xff0c;憑借“按字段處理”的核心能力&#xff0c;成為了比grep&#xff08;單純匹配…

畢業項目推薦:68-基于yolov8/yolov5/yolo11的水稻蟲害檢測識別系統(Python+卷積神經網絡)

文章目錄 項目介紹大全&#xff08;可點擊查看&#xff0c;不定時更新中&#xff09;概要一、整體資源介紹技術要點功能展示&#xff1a;功能1 支持單張圖片識別功能2 支持遍歷文件夾識別功能3 支持識別視頻文件功能4 支持攝像頭識別功能5 支持結果文件導出&#xff08;xls格式…

Qt為什么要引入QML語言?

Qt發布于1991年&#xff0c;經過30多年的發展&#xff0c;Qt/C已經成為了眾多學子&#xff0c;拿來學習C的首選框架。Qt/Widgets&#xff0c;相對于其他界面庫&#xff08;如GNOME、KDE&#xff09;&#xff0c;其實已經很優秀&#xff0c;已經可以成為number one了。在已經是第…

設計模式在Java中的應用:從單例模式到工廠模式的全面解析!

全文目錄&#xff1a;開篇語前言1. 單例模式&#xff1a;確保全局只有一個實例1.1 餓漢式單例1.2 懶漢式單例1.3 雙重檢查鎖定&#xff08;DCL&#xff09;2. 工廠模式&#xff1a;簡化對象創建2.1 簡單工廠模式2.2 工廠方法模式2.3 抽象工廠模式3. 其他設計模式3.1 觀察者模式…

Meta AIUCSD放大招:DeepConf 讓大語言模型推理既快又準,84.7%的token節省+近乎完美的準確率!

1. 【前言】 Meta&UCSD 大語言模型&#xff08;LLMs&#xff09; 在推理任務中通過自一致性等測試時縮放方法展現出巨大潛力&#xff0c;但存在精度收益遞減和計算開銷高的問題。為此&#xff0c;Meta與UCSD的研究人員提出DeepConf方法&#xff0c;它利用模型內部的置信度信…

解決leetcode第3671.子序列美麗值求和問題

3671. 子序列美麗值求和難度&#xff1a;困難問題描述&#xff1a;給你一個長度為 n 的整數數組 nums。對于每個 正整數 g&#xff0c;定義 g 的 美麗值 為 g 與 nums 中符合要求的子序列數量的乘積&#xff0c;子序列需要 嚴格遞增 且最大公約數&#xff08;GCD&#xff09;恰…