vue3ts websocket通信

前端:vue3+ts
后端:springboot




npm安裝依賴

cnpm install sockjs-client stompjs

前端代碼

<template><div><el-input v-model="message" type="text" placeholder="發送" /><el-button-group><el-button type="primary" @click="sendMessage">發送</el-button><el-button type="primary" @click="">斷開連接</el-button></el-button-group><div v-for="(chatMessage, username) in chatMessages" :key="username"><strong>{{ username }}:</strong> {{ chatMessage }}</div></div>
</template><script lang="ts">
import SockJS from 'sockjs-client';
import Stomp from 'stompjs';
import {onMounted, onUnmounted, ref} from "vue";export default {name: 'TestChat',setup() {const message = ref('');const chatMessages = ref({} as Record<string, string>);let stompClient: Stomp.Client;const connectWebSocket = () => {const socket = new SockJS('http://localhost:8600/chat'); // SockJS端點stompClient = Stomp.over(socket);stompClient.connect({// 在這里添加simpUsername頭信息'simpusername': "username1"}, (frame) => {console.log('已連接: ' + frame);// ... 訂閱消息、發送消息等邏輯stompClient.subscribe('/topic/private/' +"username1", (chatMessage) => {const messageData = JSON.parse(chatMessage.body);chatMessages.value[messageData.username] = messageData.message;});});// stompClient.onerror = (error:any) => {//   console.error('112233WebSocket Error:', error);// };//斷開連接try{stompClient.disconnect(()=>{console.error('WebSocket連接已斷開');})}catch(e){console.error('WebSocket連接已斷開');}};const sendMessage = () => {if (stompClient && message.value ) {// const targetUser = prompt('Enter the username of the recipient:');const targetUser = 'touserId' ;const chatMessage = {username: "username",message: message.value,};stompClient.send("/app/private/" + targetUser, {'simpusername': "username1"}, JSON.stringify(chatMessage));message.value = ''; // 清空輸入框}};onMounted(() => {connectWebSocket();});onUnmounted(() => {if (stompClient) {stompClient.disconnect();}});return {message,chatMessages,sendMessage,};},
};
</script>

sockjs-client會報錯:

Uncaught ReferenceError: global is not defined

解決方法:
在 index.html 中添加腳本:
?

<script type="text/javascript" >if (window.global === undefined) {window.global = window;}</script>

后端

關鍵的pom依賴:
?

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

我全部的pom依賴:
?

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-commons</artifactId><version>2.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.11</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.7.11</version></dependency><!--        一、導入依賴--><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.7</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.1</version></dependency><!-- mysql依賴--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--nacos客戶端依賴--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.1</version></dependency><!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency></dependencies>

代碼:
配置類:

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.*;/*** 配置 WebSocket 端點*/
@EnableWebSocketMessageBroker
@Configuration
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {/*** <dependency>*             <groupId>org.springframework.boot</groupId>*             <artifactId>spring-boot-starter-websocket</artifactId>*         </dependency>* @param config*/@Overridepublic void configureMessageBroker(MessageBrokerRegistry config) {config.enableSimpleBroker("/topic");config.setApplicationDestinationPrefixes("/app");}@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {registry.addEndpoint("/chat").setAllowedOrigins("*").withSockJS();}
}

controller:


import org.springframework.messaging.handler.annotation.*;
import org.springframework.stereotype.Controller;@Controller
public class ChatController {@MessageMapping("/private/{toUsername}")@SendTo("/topic/private/{toUsername}")public String sendToUser(String message, @Header("simpusername") String username,@DestinationVariable String toUsername) throws Exception {// Save message to the databaseSystem.out.println("username:"+username+" toUsername:"+toUsername+" message:"+message);return  "{from: " + username + ", to : " + toUsername + " , message : " + message + "}";}
}

啟動類:
?

@SpringBootApplication
public class TestApplication {public static void main(String[] args) {SpringApplication.run(TestApplication.class, args);}
}

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

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

相關文章

LCR 170. 交易逆序對的總數

解題思路&#xff1a; 歸并排序&#xff0c;在歸并的過程中不斷計算逆序對的個數 count mid -i 1&#xff1b;的來源見下圖&#xff0c;因為兩個數組都是單調遞增的&#xff0c;所以如果第一個數組的前一個元素大于第二個數組的對應元素&#xff0c;那么第一個數組的這一元素…

借助Aspose.SVG圖像控件,在 C# 中將圖像轉換為 Base64

Base64 編碼是一種二進制到文本的編碼方案&#xff0c;可有效地將二進制數據轉換為 ASCII 字符&#xff0c;為數據交換提供通用格式。在某些情況下&#xff0c;我們可能需要將JPG或PNG圖像轉換為 Base64 字符串數據。在這篇博文中&#xff0c;我們將學習如何在 C# 中將圖像轉換…

分享經典、現代和前沿軟件工程課程

隨著信息技術的發展&#xff0c;軟件已經深入到人類社會生產和生活的各個方面。軟件工程是將工程化的方法運用到軟件的開發、運行和維護之中&#xff0c;以達到提高軟件質量&#xff0c;降低開發成本的目的。軟件工程已經成為當今最活躍、最熱門的學科之一。 本次軟件工程MOOC課…

模板06-普通函數與函數模板調用規則

1、如果函數模板和普通函數都可以實現&#xff0c;優先調用普通函數 2、可以通過空模板參數列表來強調調用函數模板 3、函數模板也可以發生重載 4、如果函數模板可以發生更好的匹配&#xff0c;優先調用函數模板 #include <iostream> using namespace std;int my_add …

混合云技術架構是什么樣的

混合云技術架構是什么樣的&#xff1f;混合云技術架構是一種將公有云和私有云相結合的云計算架構。它允許組織在私有云和公有云之間靈活地共享和遷移應用程序、數據和服務。 混合云技術架構的設計可以根據組織的需求和業務要求進行定制&#xff0c;通常包括以下組件&#xff1…

現在如何才能開通微信公眾號留言功能?

為什么公眾號沒有留言功能&#xff1f;2018年2月12日之后直到現在&#xff0c;新注冊公眾號的運營者會發現一個問題&#xff1a;無論是個人還是企業的公眾號&#xff0c;在后臺都找不到留言功能了。這對公眾號來說絕對是一個極差的體驗&#xff0c;少了一個這么重要的功能&…

萬村樂數字鄉村系統開源代碼:革命性引領,助推鄉村振興新篇章

如今&#xff0c;國際社會普遍認為信息化、數字化已是重大且不可逆轉的發展趨勢&#xff0c;如何讓廣大農村地區充分分享到這個發展帶來的紅利&#xff0c;從而提升農村的經濟活力&#xff0c;確保村民生活質量不斷優化&#xff0c;已然成為我們需要認真研究并積極解決的重大議…

Window下編寫的sh文件在Linux/Docker中無法使用

Window下編寫的sh文件在Linux/Docker中無法使用 一、sh文件目的1.1 初始狀態1.2 目的 二、過程與異常2.1 首先獲取標準ubuntu20.04 - 正常2.2 啟動ubuntu20.04容器 - 正常2.3 執行windows下寫的preInstall文件 - 報錯 三、檢查和處理3.1 評估異常3.2 處理異常3.3 調整后運行測試…

WebFlux的探索與實戰 - r2dbc的多表查詢

前言 在一個有數據庫的項目中&#xff0c;條件查詢與多表查詢總是同幽靈般如影隨形。 好久不見朋友們&#xff0c;我是forte。 本篇文章會以我的 個人經驗 來介紹下如何在 Spring WebFlux 中使用 Spring Data R2DBC 進行多表查詢。 這次我會以一個自己寫的項目作為基礎來為各…

[課程]yolov9目標檢測封裝成類調用

搞定系列&#xff1a;yolov9目標檢測封裝成類調用 課程地址&#xff1a;https://edu.csdn.net/course/detail/39352 課程介紹課程目錄討論留言 你將收獲 學會yolov9封裝基本技巧和大體思路 學會yolov9封裝類的API調用技巧和自由擴展 學會使用Pycharm調試技巧和運行腳本技…

「連載」邊緣計算(二十四)03-04:邊緣部分源碼(源碼分析篇)

&#xff08;接上篇&#xff09; 在Register()函數中對EdgeHub struct的初始化只是對EdgeHub struct中的controller進行初始化。controller的初始化函數具體如下所示。 KubeEdge/edge/pkg/edgehub/controller.go //NewEdgeHubController creates and returns a EdgeHubContro…

uniapp+vue基于Android的圖書館借閱系統qb4y3-nodejs-php-pyton

uni-app框架&#xff1a;使用Vue.js開發跨平臺應用的前端框架&#xff0c;編寫一套代碼&#xff0c;可編譯到Android、小程序等平臺。 框架支持:springboot/django/php/Ssm/flask/express均支持 前端開發:vue 語言&#xff1a;pythonjavanode.jsphp均支持 運行軟件:idea/eclip…

2023天津公租房網上登記流程圖,注冊到信息填寫

2023年天津市公共租賃住房網上登記流程圖 小編為大家整理了天津市公共租賃住房網上登記流程&#xff0c;從登記到填寫信息。 想要體驗的朋友請看一下。 申請天津公共租賃住房時拒絕申報家庭情況會怎樣&#xff1f; 天津市住房保障家庭在享受住房保障期間&#xff0c;如在應申…

智慧草莓基地:Java與SpringBoot的技術革新

??計算機畢業編程指導師 ??個人介紹&#xff1a;自己非常喜歡研究技術問題&#xff01;專業做Java、Python、微信小程序、安卓、大數據、爬蟲、Golang、大屏等實戰項目。 ??實戰項目&#xff1a;有源碼或者技術上的問題歡迎在評論區一起討論交流&#xff01; ?? Java、…

xss.haozi:0x00

0x00沒有什么過濾所以怎么寫都沒有關系有很多解 <script>alert(1)</script>

【Linux取經路】文件系統——inode與軟硬鏈接

文章目錄 一、前言二、認識硬件——磁盤2.1 磁盤的存儲構成2.2 磁盤的邏輯抽象 三、操作系統對磁盤的使用3.1 再來理解創建文件3.2 再來理解刪除文件3.3 再來理解目錄 四、硬鏈接五、軟鏈接六、結語 一、前言 在之前的【Linux取經路】文件系統之被打開的文件——文件描述符的引…

DevStack 基于 Ubuntu 部署 OpenStack

Devstack 簡介 DevStack 是一系列可擴展的腳本&#xff0c;用于基于 git master 的最新版本快速調出完整的 OpenStack 環境。devstack 以交互方式用作開發環境和 OpenStack 項目大部分功能測試的基礎。 devstack 透過執行 stack.sh 腳本&#xff0c;搭建 openstack 環境&…

AcWing 799. 最長連續不重復子序列

Problem: AcWing 799. 最長連續不重復子序列 文章目錄 思路解題方法復雜度Code 思路 這是一個求最長連續不重復子序列的問題。我們可以使用雙指針&#xff08;滑動窗口&#xff09;的方法來解決。我們維護一個窗口&#xff0c;并使用一個數組來記錄窗口內元素的出現次數。當窗口…

深度學習的一個完整過程通常包括以下幾個步驟

深度學習的一個完整過程通常包括以下幾個步驟&#xff1a; 問題定義和數據收集&#xff1a; 定義清晰的問題&#xff0c;明確任務的類型&#xff08;分類、回歸、聚類等&#xff09;以及預期的輸出。收集和整理用于訓練和評估模型的數據集。確保數據集的質量&#xff0c;進行預…

車聯網產品與應用

在中國&#xff0c;先是小鵬汽車官宣“智駕覆蓋城市數量、可用里程以及用戶口碑均為行業第一”。后有華為問界官宣OTA&#xff0c;領航功能全國可用路段高達99%&#xff0c;“全國都能用&#xff0c;哪哪都能開”。 似乎分分鐘&#xff0c;“自動駕駛”就要干成了。但日新月異的…