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:使用方法

js 复制代码
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:定义参数

js 复制代码
data(){
	return{
	  websocket: null,
      setIntervalWesocketPush: null,
      againSocket: true,
	}
}

解决步骤2:初始化websocket

js 复制代码
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:断连后的重连

js 复制代码
// 重连
reconnect() {
  console.log('正在重连');
  // 进行重连
  setTimeout(() => {
    this.initWebSocket();
  }, 1000);
},
相关推荐
云飞云共享云桌面13 分钟前
10个SolidWorks研发设计共享一台工作站——昆山精密机械工厂降本增效一举三得
网络
1024肥宅26 分钟前
浏览器网络请求 API:全面解析与高级封装(1)
前端·websocket·axios
1024肥宅28 分钟前
浏览器网络请求 API:全面解析与高级封装(2)
前端·websocket·axios
Bruce_Liuxiaowei40 分钟前
SSH主机密钥验证失败(Host key verification failed)深度解析与解决方案
运维·网络·ssh
小豪GO!2 小时前
HTTPS原理
网络协议·http·https
星瞰物联2 小时前
融合北斗与天通卫星通信技术的堤坝水文监测卫星图传系统
网络·物联网·安全·系统架构
周杰伦_Jay2 小时前
【GRPC 和 HTTP】设计目标和底层实现
网络·网络协议·http
汤愈韬3 小时前
防火墙用户管理技术
网络协议·网络安全·huawei
木子欢儿3 小时前
Prometheus Blackbox域名SSL证书监控并设置AlertManager告警
网络·网络协议·ssl·prometheus
北京耐用通信3 小时前
解码协议迷雾:耐达讯自动化Profinet转Devicenet让食品包装称重模块“跨界对话”的魔法
人工智能·物联网·网络协议·自动化·信息与通信