在 Vue.js 2.x 中使用 WebSocket 与 Spring Boot 2.7 实现通信

本文主要是介绍在 Vue.js 2.x 中使用 WebSocket 与 Spring Boot 2.7 实现通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:近期在研究远程遥控空调,需要通过接口记录前端的一些动作,那么前端需要实现主动通知接口,并接收来自接口的通知。

一、方案

通过在Vue.js 2.x 中使用 WebSocket 与 Spring Boot 2.7 实现通信,使用 STOMP(Simple Text Oriented Messaging Protocol)作为 WebSocket 子协议,并使用 vue-stomp 库来在 Vue.js 中管理 WebSocket 连接。

二、具体实现

1、 Spring Boot 设置 WebSocket 支持

1.1、添加依赖

在 Spring Boot 项目的 pom.xml 文件中添加 WebSocket 依赖。

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

 1.2、配置 WebSocket

在 Spring Boot 应用程序中配置 WebSocket 支持,通常需要创建一个配置类并启用 WebSocket

package com.example.tool.config;import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.*;@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {registry.addEndpoint("/websocket")//允许websocket跨域.setAllowedOriginPatterns("*")//启用websocket备选方案(浏览器不支持的话就会启动).withSockJS();}@Overridepublic void configureMessageBroker(MessageBrokerRegistry registry) {registry.enableSimpleBroker("/topic"); // 订阅的消息前缀registry.setApplicationDestinationPrefixes("/app"); // 应用请求的前缀}
}

1.3、处理 WebSocket消息的类

package com.example.tool.controller;import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;@Controller
public class MyWebSocketController {@MessageMapping("/sendMessage") // 处理客户端发送到 "/app/sendMessage" 的消息@SendTo("/topic/messages") // 将处理后的消息广播到 "/topic/messages"public String handleMessage(String message) {// 你可以在这里处理收到的消息,比如添加时间戳、记录日志等return "Received: " + message;}
}

2、Vue.js 使用 vue-stomp

2.1、添加依赖

npm install sockjs-client stompjs

2.2、 代码示例

import SockJS from 'sockjs-client';
import Stomp from 'stompjs';// 在这里继续使用 SockJS 和 Stomp 来创建 WebSocket 连接和实现 STOMP 协议的功能
// 创建 SockJS 连接
const socket = new SockJS('http://localhost:8080/websocket');// 创建 Stomp 客户端
const stompClient = Stomp.over(socket);// 连接 Stomp 客户端
stompClient.connect({}, (frame) => {console.log('Connected: ' + frame);// 订阅消息stompClient.subscribe('/topic/messages', (message) => {console.log('Received message: ' + message.body);// 在这里处理接收到的消息,例如更新 UI});
}, (error) => {console.error('Error connecting to WebSocket: ' + error);
});// 发送消息
const sendMessage = (message) => {stompClient.send('/app/sendMessage', {}, JSON.stringify({ content: message }));
};// 断开连接
const disconnect = () => {if (stompClient !== null) {stompClient.disconnect();}console.log('Disconnected');
};

3、测试

在运行java项目后,直接访问:http://localhost:8088/websocket。应该是返回

在前端访问vue项目,成功应该返回:

接口响应:

{"entropy":909984842,"origins":["*:*"],"cookie_needed":true,"websocket":true}

三、可能遇见的问题

1、没有开启websocket跨域

很多人会没有开启跨域会出现以下错误:Whoops! Lost connection to http://localhost:8088/websocket

我们要做的是在SpringBoot2.7中WebSocketConfig配置类中开启websocket跨域:

setAllowedOriginPatterns("*")

这篇关于在 Vue.js 2.x 中使用 WebSocket 与 Spring Boot 2.7 实现通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/953133

相关文章

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select

MySQL 横向衍生表(Lateral Derived Tables)的实现

《MySQL横向衍生表(LateralDerivedTables)的实现》横向衍生表适用于在需要通过子查询获取中间结果集的场景,相对于普通衍生表,横向衍生表可以引用在其之前出现过的表名,本文就来... 目录一、横向衍生表用法示例1.1 用法示例1.2 使用建议前面我们介绍过mysql中的衍生表(From子句

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

MYSQL查询结果实现发送给客户端

《MYSQL查询结果实现发送给客户端》:本文主要介绍MYSQL查询结果实现发送给客户端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql取数据和发数据的流程(边读边发)Sending to clientSending DataLRU(Least Rec

MySQL分区表的具体使用

《MySQL分区表的具体使用》MySQL分区表通过规则将数据分至不同物理存储,提升管理与查询效率,本文主要介绍了MySQL分区表的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、分区的类型1. Range partition(范围分区)2. List partition(列表分区)3. H

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Java SWT库详解与安装指南(最新推荐)

《JavaSWT库详解与安装指南(最新推荐)》:本文主要介绍JavaSWT库详解与安装指南,在本章中,我们介绍了如何下载、安装SWTJAR包,并详述了在Eclipse以及命令行环境中配置Java... 目录1. Java SWT类库概述2. SWT与AWT和Swing的区别2.1 历史背景与设计理念2.1.