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);
},

相关推荐

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

    2024-02-04 07:26:06       43 阅读
  2. gin+sse实现离散的消息通知

    2024-02-04 07:26:06       31 阅读
  3. RabbitMQ延迟消息通过死信交换机实现

    2024-02-04 07:26:06       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-04 07:26:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-04 07:26:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-04 07:26:06       82 阅读
  4. Python语言-面向对象

    2024-02-04 07:26:06       91 阅读

热门阅读

  1. 为什么要使用Jupyter Notebook?

    2024-02-04 07:26:06       57 阅读
  2. 力扣日记1.31-【回溯算法篇】90. 子集 II

    2024-02-04 07:26:06       53 阅读
  3. 【云计算】opentack的高级服务部署与调优

    2024-02-04 07:26:06       43 阅读
  4. 前端html+css笔记

    2024-02-04 07:26:06       56 阅读
  5. RPC原理

    2024-02-04 07:26:06       50 阅读
  6. C++设计模式-里氏替换原则

    2024-02-04 07:26:06       51 阅读