当前位置: 首页 > news >正文

vue2和vue3项目使用signalr插件,前后端如何配合的

vue2和vue3项目使用signalr插件,前后端如何配合使用

    • 后端(以 Java 为例)
      • 使用 Spring Boot 和 Spring SignalR
    • 后端(以.NET Core 为例)
      • 1、安装SignalR包
      • 2、创建 SignalR Hub 类
      • 3、配置 SignalR 服务
    • 前端VUE
      • 1、安装SignalR客户端库
      • 2、创建 signalr.js 文件进行封装
      • 3、在 Vue2 组件中使用
      • 4、在 Vue 3 组件中使用
    • 总结

后端(以 Java 为例)

使用 Spring Boot 和 Spring SignalR

import org.springframework.stereotype.Component;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;// 启用 WebSocket 消息代理
@EnableWebSocketMessageBroker
@Component
public class SignalRBackendConfigurer extends AbstractWebSocketMessageBrokerConfigurer {@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {// 注册一个用于客户端连接的端点,路径为 "/signalr"registry.addEndpoint("/signalr").withSockJS();}@Overridepublic void configureMessageBroker(MessageBrokerRegistry registry) {// 配置消息代理,指定应用内目的地的前缀registry.setApplicationDestinationPrefixes("/app");// 定义广播消息的目的地前缀registry.enableSimpleBroker("/topic");}// 发送消息的方法public void sendMessage(String message) {SimpMessagingTemplate template = new SimpMessagingTemplate();template.convertAndSend("/topic/message", message);}
}

后端(以.NET Core 为例)

1、安装SignalR包

在ASP.NET Core项目中,你需要安装SignalR的NuGet包。

Install-Package Microsoft.AspNetCore.SignalR

2、创建 SignalR Hub 类

定义一个继承自 Hub 的类来处理与客户端的交互逻辑。

using Microsoft.AspNetCore.SignalR;// 定义 SignalR Hub 类,用于处理与客户端的交互
public class MySignalRHub : Hub
{// 定义发送消息的方法,将消息发送给所有连接的客户端public async Task SendMessageToClients(string message){await Clients.All.SendAsync("MessageReceived", message);}
}

3、配置 SignalR 服务

在 Startup 类的 ConfigureServices 方法中注册 SignalR 服务。
在 Configure 方法中配置 SignalR 的路由。

// 在 Startup 类中配置 SignalR 服务
public class Startup
{public void ConfigureServices(IServiceCollection services){// 注册 SignalR 服务services.AddSignalR();}public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.UseRouting();app.UseEndpoints(endpoints =>{// 配置 SignalR 的路由,指定 Hub 的路径endpoints.MapHub<MySignalRHub>("/mySignalRHub");});}
}

前端VUE

1、安装SignalR客户端库

npm install @microsoft/signalr
yarn add @microsoft/signalr

2、创建 signalr.js 文件进行封装

import * as signalR from '@microsoft/signalr';// 定义 SignalRService 类
export default class SignalRService {//option为调用SignalRService 类传进来的参数constructor(option) {// 初始化 SignalR 连接对象为 nullthis.connection = null;//this.url = options.url || "";// 初始化重试次数为 0this.retryCount = 0;// 最大重试次数this.maxRetryAttempts = 5;// 重试间隔(毫秒)this.retryInterval = 5000;}// 初始化 SignalR 连接的方法initSignalR(url) {// 创建 SignalR 连接对象,并指定后端的 URLthis.connection = new signalR.HubConnectionBuilder().withUrl(url).build();// 调用启动连接的方法this.startConnection();}// 实际启动连接的方法startConnection() {// 尝试启动连接this.connection.start().then(() => {// 连接成功,打印日志并重置重试次数console.log('Connected to SignalR successfully!');this.retryCount = 0;}).catch(err => {// 连接失败,打印错误日志console.error('Error connecting to SignalR:', err);// 如果重试次数小于最大重试次数if (this.retryCount < this.maxRetryAttempts) {// 设置一个定时器,在指定间隔后重试连接,并增加重试次数setTimeout(() => {this.retryCount++;this.startConnection();}, this.retryInterval);}});}// 用于注册消息接收回调函数的方法onMessageReceived(callback) {//.net 在连接对象上注册消息接收事件的回调函数this.connection.on("MessageReceived", callback);java 在连接对象上注册消息接收事件的回调函数//this.connection.on("message", callback);}// 停止 SignalR 连接的方法stopSignalR() {// 如果存在连接对象if (this.connection) {// 停止连接,并打印日志this.connection.stop();console.log('Disconnected from SignalR.');}}
}

3、在 Vue2 组件中使用

<template><!-- 组件模板 -->
</template><script>
import SignalRService from './signalr.js';export default {data() {return {};},created() {// 创建 SignalRService 实例this.signalR = new SignalRService();// 初始化 SignalR 配置,并指定后端 URLthis.signalR.initSignalR('/mySignalRHub');// 注册消息接收的回调函数this.signalR.onMessageReceived((message) => {// 处理接收到的消息,此处仅打印到控制台console.log(message);});},beforeDestroy() {// 在组件销毁时,停止 SignalR 连接this.signalR.stopSignalR();}
}
</script>

4、在 Vue 3 组件中使用


<template><!-- 组件模板 -->
</template><script setup>
import SignalRService from './signalr.js';// 创建 SignalR 服务实例
const signalR = new SignalRService();// 组件创建时初始化 SignalR 配置
onMounted(() => {signalR.initSignalR('/signalr');// 注册消息接收的回调函数signalR.onMessageReceived((message) => {console.log(message);});
});// 组件卸载时停止 SignalR 连接
onUnmounted(() => {signalR.stopSignalR();
});
</script>

总结

后端java使用 Spring Boot 和 Spring SignalR。
后端创建了 SignalR Hub 类,并进行了服务的注册和路由配置,以准备与前端进行通信。
前端的 signalr.js 中,构造函数初始化了一些重连相关的参数。initSignalR 方法用于创建连接,startConnection 方法负责实际的连接启动,并在连接失败时根据重试次数和间隔进行自动重连尝试。
在 Vue 组件中,在 created 钩子中初始化 SignalR 服务,监听消息,并在组件销毁时(beforeDestroy 钩子)断开连接。
例如,如果网络出现短暂波动导致连接断开,前端会自动进行重试连接,以保持通信的稳定性。而当关闭 Vue 页面时,会确保断开 SignalR 链接,释放相关资源。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大语言模型有什么用途?
  • 计算机网络17——IM聊天系统——客户端核心处理类框架搭建
  • XV6——锁与并发
  • AI技术在招聘数据分析洞察中的作用
  • haproxy总结与实验
  • sgetrf M N is 103040 时报错,这是个bug么 lapack and Openblas the same,修复备忘
  • 网站证书过期导致WordPress后台无法登录问题解决,页面样式丢失
  • EMQX Platform Snowflake:构建可再生分布式能源的智慧未来
  • 了解LVS,配置LVS
  • 刚刚,模糊测试平台SFuzz受到行业认可
  • 在 SOCKS 和 HTTP 代理之间如何选择?
  • Elasticsearch自动补全功能实践与Java API应用
  • 若依线程池多线程并发 ruoyi-vue SpringBoot 实战批量发送微信小程序订阅消息
  • QT 的 QSettings 读写 INI 文件的示例
  • 前后端分离时代的SEO实践经验
  • JS 中的深拷贝与浅拷贝
  • Angular6错误 Service: No provider for Renderer2
  • Git同步原始仓库到Fork仓库中
  • Javascript 原型链
  • JavaScript创建对象的四种方式
  • Java教程_软件开发基础
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PAT A1092
  • PHP面试之三:MySQL数据库
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Vim Clutch | 面向脚踏板编程……
  • 订阅Forge Viewer所有的事件
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 提醒我喝水chrome插件开发指南
  • 原生Ajax
  • 怎么将电脑中的声音录制成WAV格式
  • 函数计算新功能-----支持C#函数
  • 选择阿里云数据库HBase版十大理由
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • (19)夹钳(用于送货)
  • (4)logging(日志模块)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (pycharm)安装python库函数Matplotlib步骤
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (二)正点原子I.MX6ULL u-boot移植
  • (二十三)Flask之高频面试点
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (生成器)yield与(迭代器)generator
  • (五)Python 垃圾回收机制
  • (一)、python程序--模拟电脑鼠走迷宫
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)一些感悟
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .net core 管理用户机密
  • .net MySql