前端vue中使用signalr的方法举例详解_vue.js

文章编号:992 技术教程 2026-02-04 vue signalr vue使用signalr

这一步需要指定SignalR Hub的URL。

在使用 SignalR 的 HubConnectionBuilder 时,可以通过链式方法配置连接的各个参数。以下是完整的参数配置写法和说明:

const connection = new signalR.HubConnectionBuilder() // 必填:设置 Hub 的 URL .withUrl(url, options) // 可选:配置日志 .configureLogging(logging) // 可选:配置自动重连 .withAutomaticReconnect(retryPolicy) // 可选:配置自定义 HTTP 客户端 .withHubProtocol(protocol) // 构建连接对象 .build();

.withUrl("https://example.com/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpConnectionOptions.LongPolling, // 自定义传输方式(默认为自动选择) accessTokenFactory: () => "your-access-token", // 身份验证 Token(如 JWT) httpClient: customHttpClient, // 自定义 HTTP 客户端(如修改超时时间) skipNegotiation: true, // 跳过协商步骤(仅适用于 WebSocket) headers: { "X-Custom-Header": "value" }, // 自定义请求头 // WebSocket 配置 websocket: { // 自定义 WebSocket 构造函数(如代理) constructor: CustomWebSocket, }, // 是否使用默认的 `fetch` API(默认为 true) useDefaultFetch: false,})

// 简单配置日志级别.configureLogging(signalR.LogLevel.Information)// 自定义日志记录器.configureLogging({ log(logLevel, message) { console.log(`[SignalR] ${logLevel}: ${message}`); }})

// 默认策略:重试 0次、3次、10次、30次 后停止.withAutomaticReconnect()// 自定义重试间隔数组(单位:毫秒).withAutomaticReconnect([0, 2000, 5000, 10000, 30000])// 高级策略:实现 `RetryPolicy` 接口.withAutomaticReconnect({ nextRetryDelayInMilliseconds(retryContext) { if (retryContext.elapsedMilliseconds < 60000) { return Math.random() * 1000; // 随机延迟 <1s } return null; // 停止重连 }})

// 使用 MessagePack 二进制协议.withHubProtocol(new signalR.protocols.msgpack.MessagePackHubProtocol())// 自定义协议(需实现 IHubProtocol)

.withUrl(url, { withCredentials: true })

根据实际需求选择配置项,确保兼容 SignalR 客户端库的版本。

启动连接是指让前端与SignalR Hub建立实际的连接。

客户端方法是指SignalR Hub调用时客户端执行的函数。通过这些方法,前端可以响应来自服务器的实时通知。

// 实时接收服务端信息(服务端-->客户端)connection.on('监听后端命名的方法A返回的数据:名称一般和invoke配套',(message) => { console.log('接受的信息Info message:', message); // 做一些赋值操作,把后端传来的数据渲染到页面});// 例:connection.on("ReceiveMessage", (user, message) => { const msg = `${user}: ${message}`; const li = document.createElement("li"); li.textContent = msg; document.getElementById("messagesList").appendChild(li);});

前端可以通过调用SignalR Hub的方法来发送消息到服务器。通常,这些方法是用户操作(如点击按钮)触发的。

// 客户端与服务端进行沟通(客户端-->服务端),客户端调取后端的方法进行通讯,后端返回信息connection.invoke("后端命名的方法A", "一些后端需要的变量根据自己需求填写")// 例:connection.invoke('SendData', 'Hello, SignalR!');

实时聊天应用使用SignalR最常见的场景之一就是实时聊天应用。通过SignalR,可以实现客户端之间的实时消息传递。

实时数据更新SignalR也可以用于实时数据更新,如股票行情、体育比赛比分等。这些应用需要频繁地从服务器获取最新数据,并实时更新到前端界面。

通知系统在一些应用中,当有新的事件发生时,需要实时通知用户。例如,在电商平台中,当有新的订单或者库存变化时,需要及时通知管理员。

以下是一个在 Vue 3 中使用 SignalR 实现连接、发送和接收数据的完整案例,包含详细注释和关键配置:

在 src/utils/signalR.js 中封装连接逻辑:

import { HubConnectionBuilder, LogLevel } from '@microsoft/signalr'export default { // 创建连接 createConnection(url, options = {}) { return new HubConnectionBuilder() .withUrl(url, options) .withAutomaticReconnect([0, 2000, 10000, 30000]) // 自定义重连策略 .configureLogging(LogLevel.Information) .build() }, // 启动连接 async startConnection(connection) { try { await connection.start() console.log('SignalR 连接成功') return true } catch (err) { console.error('SignalR 连接失败:', err) return false } }, // 关闭连接 async stopConnection(connection) { if (connection) { await connection.stop() console.log('SignalR 连接已关闭') } }}

// Hub 类public class ChatHub : Hub{ // 客户端调用此方法发送消息 public async Task SendMessage(string message) { // 广播消息给所有客户端(方法名 ReceiveMessage 需与前端匹配) await Clients.All.SendAsync("ReceiveMessage", Context.User.Identity.Name, message); }}// Startup.cs 或 Program.cs 中配置app.UseEndpoints(endpoints =>{ endpoints.MapHub("/chatHub");});

跨域问题:确保服务端启用 CORS:

services.AddCors(options => options.AddPolicy("AllowAll", builder => builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader()));

身份验证:如果使用 JWT,需在 withUrl 配置中传递 Token:

.withUrl(this.hubUrl, { accessTokenFactory: () => localStorage.getItem('token')})

协议兼容:默认使用 JSON 协议,如需二进制优化可切换为 MessagePack:

import { MessagePackHubProtocol } from '@microsoft/signalr-protocol-msgpack'this.connection = new HubConnectionBuilder() .withHubProtocol(new MessagePackHubProtocol())

错误处理:建议全局监听错误:

this.connection.onreconnecting((error) => { console.log('正在尝试重新连接...', error)})

性能优化:在频繁通信场景下,建议使用 WebSocket 传输(需服务端支持):

.withUrl(url, { transport: HttpTransportType.WebSockets })

通过这个案例,你可以快速实现:

到此这篇关于前端vue中使用signalr的文章就介绍到这了,更多相关前端vue使用signalr内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!


本文地址: https://www.earthnavs.com/jishuwz/d903e5ee85cb73d7c36c.html
全局中部横幅
360AI办公

360AI图片工具是一款高质量在线图片工具,使用简便,让小白也能轻松上手快速出图。网站的功能有:裁剪旋转、修改尺寸、画笔标记、图片压缩、图片格式转换、AI抠图、AI擦除、AI去字迹、AI去水印、图片提取文字、无损放大、AI创作、涂鸦生成、魔法风格、图生图、AI全景、自定义布局、文章配图、广告创意生成、AI证件照等!

Linux命令大全(手册)

专注于Linux命令大全与详解的在线命令查询网站,包含Linux命令手册、Linux命令详解、Linux命令学习与shell脚本编程大全等优质学习资料,准确,丰富,稳定,在技术之路上为您护航!

开发者导航

程序员一站式导航平台,汇集AI工具、前端、后端、Python、Java等1000+优质开发工具

首页

观察者网风闻社区,热辣时事,专家点评,网友评论,尽在掌握

斗鱼

斗鱼-每个人的直播平台提供高清、快捷、流畅的视频直播和游戏赛事直播服务,包含英雄联盟lol直播、穿越火线cf直播、dota2直播、美女直播等各类热门游戏赛事直播和各种名家大神游戏直播,内容丰富,推送及时,带给你不一样的视听体验,一切尽在斗鱼-每个人的直播平台。

Sakura

免费的内网穿透服务,轻松在家电脑搭建网站

神卓互联内网穿透

神卓互联提供内网穿透、端口映射服务,采用自主研发WangooeTunnel通信技术,实现外网访问内网服务器,提供技术支持目前为全球3000万用户提供网络通信协议服务,并提供远程支持和在线协作。

超悦电脑

收藏特快网址是开放式网站分类目录导航,收录国内外、各行业优秀网站,旨在为用户提供网站分类目录检索、优秀网站参考、网站推广服务。

717收录网

717收录网是一个综合性的网络资源平台,专注于为用户提供便捷、全面的网址导航服务,同时提供自动审核提交收录功能,致力于为广大网友提供专业的互联网资源导航服务

站长导航网

站长导航网系统是一个专业收录优质网站的网址导航平台,提供简洁高效的网络入口。免费提交收录,发现实用工具、设计资源、程序员必备站,打造您的专属上网主页