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

signalR+websocket:实现消息实时通讯——技能提升

signalR

解决步骤1:npm install @microsoft/signalr@6.0.6

安装指定版本的@microsoft/signalr,我这边安装的版本是6.0.6

解决步骤2:引入import * as signalR from '@microsoft/signalr';

import * as signalR from '@microsoft/signalr';
下面第三步会用到token,所以此处也先引用一下cookie
import Cookie from 'js-cookie';

解决步骤3:使用方法

let hubUrl = process.env.VUE_APP_API_BASE_URL + '/my_hub';
var token = Cookie.get('Authorization');
token = token.replace('Bearer', '').trim();
this.connection = new signalR.HubConnectionBuilder().withUrl(hubUrl, { accessTokenFactory: () => token }).withAutomaticReconnect().build();
this.connection.start().then(() => {// 连接成功后,订阅消息console.log('连接成功后,订阅消息');}).catch((err) => {// 连接异常时的处理console.log('连接异常时的处理');});
//自动重连成功后的处理
this.connection.onreconnected((connectionId) => {console.log(connectionId);
});
this.connection.on('ReceiveMessage', (message) => {console.log(message.split('::')[0]);this.$notification.info({message: message.split('::')[0],description: message.split('::')[1],onClick: () => {console.log('Notification Clicked!');},duration: 4.5,});
});

websocket

解决步骤1:定义参数

data(){return{websocket: null,setIntervalWesocketPush: null,againSocket: true,}
}

解决步骤2:初始化websocket

initWebSocket() {let that = this;var websocket = null;if ('WebSocket' in window) {websocket = new WebSocket('wss://echo.websocket.org/');} else {alert('该浏览器不支持websocket!');}websocket.onopen = function (event) {console.log('建立连接');websocket.send('Hello WebSockets!');};websocket.onclose = function (event) {console.log('连接关闭');that.reconnect(); //尝试重连websocket};//建立通信后,监听到后端的数据传递websocket.onmessage = function (event) {console.log(event);};websocket.onerror = function () {// notify.warn("websocket通信发生错误!");// initWebSocket()};window.onbeforeunload = function () {websocket.close();};
},

解决步骤3:断连后的重连

// 重连
reconnect() {console.log('正在重连');// 进行重连setTimeout(() => {this.initWebSocket();}, 1000);
},
http://www.lryc.cn/news/293380.html

相关文章:

  • 机器学习入门-----sklearn
  • 双非本科准备秋招(15.3)—— 力扣二叉树
  • 20240203在WIN10下使用GTX1080配置stable-diffusion-webui.git不支持float16精度出错的处理
  • 京东微前端框架MicroApp简介
  • SpringBoot 使用定时任务(SpringTask)
  • 国标GB/T 28181详解:设备视音频文件检索消息流程
  • openssl自签名CA根证书、服务端和客户端证书生成并模拟单向/双向证书验证
  • NIO Selector简介
  • 2023-12蓝桥杯STEMA考试 C++ 中高级试卷解析
  • 设计模式——2_1 命令(Command)
  • HP数组面试题
  • 机器学习5-线性回归之损失函数
  • vulhub中Adminer ElasticSearch 和 ClickHouse 错误页面SSRF漏洞复现(CVE-2021-21311)
  • 浅谈Zookeeper及windows下详细安装步骤
  • vite, vue3, vue-router, vuex, ES6学习日记
  • 25考研|660/880/1000/1800全年带刷计划
  • Mybatis基础教程及使用细节
  • 10 分钟在K8s 中部署轻量级日志系统 Loki
  • 图像处理python基础
  • 基于WordPress开发微信小程序2:决定开发一个wordpress主题
  • [Python] 什么是网格搜索以及scikit-learn中GridSearch类的介绍和使用案例?
  • Linux-正则表达式
  • Java基础学习:System类和Static方法的实际使用
  • 线性代数------矩阵的运算和逆矩阵
  • Flutter 开发3:创建第一个Flutter应用
  • Linux中断下半部分:软中断,tasklet和工作队列
  • Flink CEP实现10秒内连续登录失败用户分析
  • QSqlRelationalTableModel 关系表格模型
  • JS和CSS实现的原生轮播图
  • 【微服务】skywalking自定义链路追踪与日志采集