在 Vue 中使用 ReconnectingWebSocket实现即时通讯聊天客服功能

前端|Vue|WebSocket 超详细 使用ReconnectingWebSocket实现无缝实时通信 WebSocket 是一种网络通信协议,提供了一个全双工通信渠道,允许数据在客户端和服务器之间以极低的延迟双向传输。与传统的 HTTP 请求不同,WebSocket 在建立连接后可以保持该连接开放,使得数据可以随时在两端传送,而无需重新建立连接。WebSocket 通信由一个握手过程开始,客户端通过 HTTP 请求与服务器建立连接,并升级到 WebSocket 连接。一旦握手成功,WebSocket 连接就会保持开放状态,直到客户端或服务器主动关闭。 阅读详情

在 Vue 中使用 ReconnectingWebSocket

ReconnectingWebSocket 是一个自动重连的 WebSocket 实现,非常适合在 Vue 项目中使用。下面是如何在 Vue 中集成和使用它的方法:

搜索  "程序员老狼"

安装 ReconnectingWebSocket

首先,你需要安装 ReconnectingWebSocket 库:

npm install reconnecting-websocket
# 或者
yarn add reconnecting-websocket

基本使用方法

1. 在组件中直接使用

import ReconnectingWebSocket from 'reconnecting-websocket';

export default {
  data() {
    return {
      socket: null,
      messages: []
    };
  },
  mounted() {
    // 创建 WebSocket 连接
    this.socket = new ReconnectingWebSocket('ws://your-websocket-url');
    
    // 监听消息
    this.socket.addEventListener('message', (event) => {
      this.messages.push(event.data);
    });
    
    // 监听连接打开
    this.socket.addEventListener('open', () => {
      console.log('WebSocket connected');
    });
    
    // 监听错误
    this.socket.addEventListener('error', (error) => {
      console.error('WebSocket error:', error);
    });
    
    // 监听连接关闭
    this.socket.addEventListener('close', () => {
      console.log('WebSocket disconnected');
    });
  },
  methods: {
    sendMessage(message) {
      if (this.socket && this.socket.readyState === WebSocket.OPEN) {
        this.socket.send(message);
      }
    }
  },
  beforeDestroy() {
    // 组件销毁时关闭连接
    if (this.socket) {
      this.socket.close();
    }
  }
};

2. 作为 Vue 插件使用(推荐)

为了更好的复用性,可以创建一个 Vue 插件:

​​src/plugins/websocket.js​​

import ReconnectingWebSocket from 'reconnecting-websocket';

const WebSocketPlugin = {
  install(Vue, options) {
    const socket = new ReconnectingWebSocket(options.url, [], {
      connectionTimeout: options.timeout || 5000,
      maxRetries: options.maxRetries || 10
    });

    Vue.prototype.$socket = socket;
    
    // 添加全局方法
    Vue.prototype.$connectWebSocket = function() {
      socket.reconnect();
    };
    
    Vue.prototype.$disconnectWebSocket = function() {
      socket.close();
    };
  }
};

export default WebSocketPlugin;

​​在 main.js 中注册插件​​

import Vue from 'vue';
import WebSocketPlugin from './plugins/websocket';

Vue.use(WebSocketPlugin, {
  url: 'ws://your-websocket-url',
  timeout: 5000,
  maxRetries: 10
});

​​在组件中使用​​

export default {
  mounted() {
    this.$socket.addEventListener('message', (event) => {
      console.log('Received message:', event.data);
    });
    
    // 发送消息
    this.$socket.send('Hello, server!');
  },
  beforeDestroy() {
    // 可选:关闭连接
    this.$disconnectWebSocket();
  }
};

高级配置选项

ReconnectingWebSocket 提供了多种配置选项:

const socket = new ReconnectingWebSocket('ws://your-websocket-url', [], {
  // 自动重连的最小延迟时间(毫秒)
  minReconnectionDelay: 1000,
  // 自动重连的最大延迟时间(毫秒)
  maxReconnectionDelay: 5000,
  // 重连延迟时间的增长因子
  reconnectionDelayGrowFactor: 1.3,
  // 连接超时时间(毫秒)
  connectionTimeout: 4000,
  // 最大重试次数,Infinity 表示无限重试
  maxRetries: Infinity,
  // 是否在关闭时自动重连
  automaticOpen: true,
  // 是否在连接丢失时立即尝试重连
  startClosed: false,
  // 调试模式
  debug: false
});

注意事项

  1. ​​跨域问题​​:确保你的 WebSocket 服务器支持跨域请求
  2. ​​SSL​​:生产环境建议使用 wss:// 而不是 ws://
  3. ​​组件销毁​​:记得在组件销毁时关闭连接,避免内存泄漏
  4. ​​响应式数据​​:WebSocket 消息不是响应式的,需要手动更新 Vue 的数据
  5. ​​重连策略​​:根据业务需求调整重连策略参数

完整示例

<template>
  <div>
    <h1>WebSocket Demo</h1>
    <button @click="sendMessage">Send Message</button>
    <div v-for="(msg, index) in messages" :key="index">{{ msg }}</div>
  </div>
</template>

<script>
import ReconnectingWebSocket from 'reconnecting-websocket';

export default {
  data() {
    return {
      socket: null,
      messages: [],
      connectionStatus: 'disconnected'
    };
  },
  mounted() {
    this.initWebSocket();
  },
  methods: {
    initWebSocket() {
      this.socket = new ReconnectingWebSocket('ws://your-websocket-url', [], {
        minReconnectionDelay: 1000,
        maxRetries: 10
      });

      this.socket.addEventListener('open', () => {
        this.connectionStatus = 'connected';
        console.log('WebSocket connected');
      });

      this.socket.addEventListener('message', (event) => {
        this.messages.push(event.data);
      });

      this.socket.addEventListener('error', (error) => {
        this.connectionStatus = 'error';
        console.error('WebSocket error:', error);
      });

      this.socket.addEventListener('close', () => {
        this.connectionStatus = 'disconnected';
        console.log('WebSocket disconnected');
      });
    },
    sendMessage() {
      if (this.socket && this.socket.readyState === WebSocket.OPEN) {
        this.socket.send('Hello from Vue!');
      }
    }
  },
  beforeDestroy() {
    if (this.socket) {
      this.socket.close();
    }
  }
};
</script>

通过这种方式,你可以在 Vue 应用中轻松实现具有自动重连功能的 WebSocket 通信。

基于vue-advanced-chat组件自义定聊天(socket.io+vue2) 通过上一篇文章我们已经在vue-advanced-chat中替换掉原有的firebase,用socket.io简单的实现了聊天功能。现在需要自义定该组件,改造成我们想要的样子:先将比较重要的几块提取出来。 阅读详情

相关推荐

WebSocket API 封装实战:TypeScript 类实现 5 大核心功能与自动重连

本文详细介绍了如何使用TypeScript封装WebSocket API,实现自动重连、心跳检测、事件管理等5大核心功能,提升前端实时通信的稳定性和可维护性。通过完整代码示例和典型场景实践,帮助开发者构建生产级WebSocket解决方案。

weixin_33802505的博客 349

vue如何在页面创建一个客服对话框

接下来,在需要展示客服对话框的地方(比如点击按钮后),引入并注册"CustomerServiceDialog"组件。然后根据业务需求控制其显示与否。首先,我们需要定义一个名为"CustomerServiceDialog"的组件,该组件将作为客服对话框显示在页面上。这个是vue组件内的代码情况。使用的编写格式是,vue2的写法。(选项式编码风格)。Vue可以通过使用组件来创建一个客服对话框。最后,在模板中添加相应的元素或事件处理程序来调用。方法,从而控制对话框的显示与隐藏。

yrldjsbk的博客 2194

layim之绑定未读消息数量

一. 效果演示 layim并没提供未读数量,因此自己马马虎虎整理了一下,效果图大概如下,献丑了 二. 实现教程 2.1、初始化init数据: 我们在用户对象里声明一个参数read,储存待读数量,json数据如图 2.2、在主面板绑定未读消息数量: 打开layim.js文件,找到u函数,在html代码拼接数组里查找绑定好友姓名的代码,然后绑定待读数量即可,代码如下。 // 在{{# if(data.username){ }}后面添加代码<d style="color:red;">&nbs

踮脚敲代码 4137

Vue.js组件,主要实现了一个简单的聊天应用界面,主要功能实现聊天记录缓存在浏览器

它的功能包括:

qq_45149139的博客 963

reconnecting-websocket:重新连接WebSocket。 对于Web,React Native,cli(Node.js)

重新连接WebSocket 如果关闭连接,将自动重新连接的WebSocket。 特征 兼容WebSocket API(相同的接口,Level0和Level2事件模型) 完全可配置 多平台(Web,ServiceWorkers,Node.js,React Native) 无依赖关系(不依赖于Window,DOM或任何EventEmitter库) 处理连接超时 允许在重新连接之间更改服务器URL 缓冲。 将在打开时发送累积的消息 可用的多个版本(请参阅dist文件夹) 调试模式 安装 npm install --save reconnecting-websocket 用法 与WebSocket浏览器API兼容 因此,此文档应该有效: 。 如果发现任何问题,请ping我。 或者,甚至更好地为您的案例编写测试并提出请求请求:) 使用简单 import ReconnectingWeb

C#上位机与VisionPro通用框架:视觉标定、通信联动与现场排坑实战

工业自动化设备的上位机开发,往往面临流程控制、视觉检测、通信交互等环节的重复搭建。C#作为主流工业语言,配合VisionPro视觉软件,可通过通用框架设计将状态机调度、相机采集、标定算法与串口/扫码枪通信等底层能力模块化,从而大幅降低项目交付成本。其核心原理在于:将设备工艺差异封装至配置层,视觉流程通过CogToolBlock工具链与VPP模板复用,九点标定建立像素与机械坐标系的映射关系。该方案已在螺丝锁付、点胶定位等多类产线落地,尤其适用于批量交付、换型频繁的视觉设备场景。这套从实践中沉淀的框架思路,以及

weixin_31102231的博客 340

终极指南:ReconnectingWebSocket与三大框架无缝集成的完整方案

ReconnectingWebSocket是一个轻量级JavaScript库,它通过装饰原生WebSocket API,提供了自动重连功能,确保在网络不稳定时仍能维持持久连接。本文将详细介绍如何在React、Vue和Angular三大主流框架中集成ReconnectingWebSocket,帮助开发者快速实现可靠的实时通信功能。 ## 为什么选择ReconnectingWebSocket? 传

gitblog_00411的博客 750

【安徽理工大学】一文带你高分拿下计算机考研复试(85+的秘密)

一文带你高分拿下安徽理工大学计算机考研复试(85+的秘密)

猫天意的博客 1525

spring boot netty整合websocket 即时通讯系统之用户一对一单聊(十)

loginOne.vue <template> <el-form> <el-select v-model="value" multiple placeholder="请选择需要发送的用户"> <el-option v-for="item in others" :key="item.value" ...

qq_36760953的博客 679

Unity游戏开发必备:HybridCLR热更新实战教程(含iOS/Android适配指南)

本文详细介绍了HybridCLR在Unity游戏开发中的热更新实战教程,包括iOS/Android平台适配指南。通过环境配置、项目结构规划、热更新工作流实现等步骤,帮助开发者高效掌握C#热更新技术,解决移动游戏快速迭代的痛点问题。

weixin_29011395的博客 441

关于Oxford Radar RobotCar Dataset的学习笔记

https://oxford-robotics-institute.github.io/radar-robotcar-dataset/documentation 简介 雷达是 Navtech CTS350-X 调频连续波 (FMCW) 扫描雷达,在所使用的配置中提供 4.38 cm 的距离分辨率和 0.9 度的旋转分辨率,范围高达 163 m,同时提供对天气条件的稳健性这可能会给其他传感器模式带来麻烦。在其他配置中,Navtech CTS350-X 可以提供超过 650 m 的范围和更高的旋转速度。然而,对

禾烁的博客 5298

spring boot netty整合websocket 即时通讯系统之用户群聊(十一)

前端使用vue和elementui通过websocket连接后端,使用reconnecting-websocket.min.js封装类保证断线重连。 loginMore.vue <template> <el-form :model="form"> <el-form-item label="用户名称"> <el-input v-...

qq_36760953的博客 1045

AI驱动的研发流程:定义高度专业和系统化的规划基准

在人工智能(AI)浪潮席卷全球的今天,软件研发的范式正经历着一场深刻而迅速的变革。AI技术的渗透,从最初的辅助工具角色,正逐步演变为驱动整个研发流程的核心引擎。传统的研发流程和项目管理方法论,在面对AI带来的高效率、高智能以及高复杂性挑战时,显得力不从心。企业对快速交付高质量软件产品、有效控制风险、并保证全流程可追溯性的需求日益迫切。

形上得其象,形下合于数;阴阳自济,玄理自明。 2182

vue中如何使用websocket

为什么要有心跳机制呢?就是为了确保连接的稳定性,说白了就是客户端通过心跳的形式告诉服务端“我”还活着,连接请不要断开。实时统计各人员打分情况,并可以控制计时器的开始、暂停、结束。如果websocket断开将进行重新连接。

不靠谱的作曲家 1720

2026.3.21:Ubuntu26.04 apt换国内源 清华源 阿里源 中科大源 163源

作为 LTS 版本,它会有 5 年的常规维护和安全更新。如果订阅 Ubuntu Pro,还能享受额外7年的支持。也就是说, Ubuntu Pro将享有长达 12 年的系统更新保障!接下来,我们将重点介绍 Ubuntu 24.04 LTS 中那些值得关注的新特性,以方便你决定是否进行升级。Ubuntu 24.04 LTS,代号 「Noble Numbat」,即将与我们见面!Canonical 已经宣布, Ubuntu 24.04 LTS。源文件地址 已经更换为。

拥抱具身智能,昇腾Ascend C 9075

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

AI人人懂 949

webScoket

webScoket import store from '../store'; import Cookies from 'js-cookie'; let socket = null; let timer = null; const time = 56000; // nginx 默认60s,所以心跳时间需要 < 60000 function in...

weixin_40874129的博客 157

QCM2290 PM-3 如何让mirco-usb支持关机充电

PM4125-3插入type-C触发开机进入关机充电的CC脚中断条件是否可以软件上屏蔽, 做到只通过VBUS中断即可触发进入关机充电模式,达到和PM4125-2的效果一样只要插入micro USB 就可以触发进入关机充电模式。硬件团队提议修改寄存器 SCHG_L_MISC_SYSOK_CFG 0x164A bit[4] 目前修改如下 — a/BOOT.XF.4.1/boot_images/QcomPkg/Library/PmicLib/target/Agatti_pmCocos/psi/pm_confi

墨染天玑的博客 444

Vue 使用 Vue-socket.io 实现即时聊天应用(实战篇 二)

1.项目说明: 我们主要通过这个项目,练习一下vue-socket.io的群聊和私聊两个功能,至于房间Rooms,有兴趣的伙伴可以自己去研究啦。 那我们的群聊是怎么实现的呢?我们会设计一个登录页面,要求输入用户的用户名,作为聊天应用的唯一标识。群聊是登录上来就有一个默认的群,而每个用户都能触发私聊。就这个思路,下面来实现。 2.登录页面实现: //vuex state: { /* 记录登录状态 */ isLogin:false, } //App.vue c..

~朴:shu的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Vue中利用websocket实现实时通讯

vue利用WebSocket进行实时通讯

weixin_51600020的博客 4214

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

vue组件websocket服务器,vue 使用WebSocket 连接

什么是WebSocket?HTML5 WebSocketWebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。在 WebSocket A...

weixin_30491017的博客 1984

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

web vue+IM即时通讯

web vue+IM即时通讯

qq_42717015的博客 975

vue 聊天窗口组件 智能客服 wss协议 长链接

vue 聊天窗口组件 智能客服 wss协议 长链接

weixin_67475735的博客 1229

ReconnectingWebSocket 在vue项目中使用步骤

根据实际情况修改new ReconnectingWebSocket('ws://example.com/socket')记得在组件销毁时,关闭WebSocket连接,例如在Vue组件的。首先,安装reconnecting-websocket库。接收到的消息将通过onWebSocketMessage。关闭WebSocket连接。

killerdoubie的博客 1379

【PC端聊天功能模板】vue-elementul简单实现电脑端客服聊天功能,pc端聊天系统静态页面布局,配套websocket方案和心跳重连机制【详细注释,拿来即用】

这里是给大家写了一个简单的模板来使用,可以直接复制了调调就能用。因为这个聊天也是很容易出现的功能,所以我写一个模板静态页面放在这,以后需要这个功能的时候可以不用布局了,直接复制改改。我的代码里面有详细的注释,相信就算是刚学完前端的萌新也是看得懂的,如果有不懂得可以提问1,页面布局自适应缩放2,点击在线可以切换客服状态,忙碌,离线,退出登录等3,模糊搜索用户列表功能4,点击用户会变底色并切换用户的聊天信息5,刚进入时不点击选中用户时隐藏发送按钮和禁用输入框。......

seeeeeeeeeee的博客 1万+

人工客服聊天

基本的 WebSocket 生命周期事件处理(连接、消息接收、关闭、错误)以及一个方法来向客户端发送消息。

m0_69432668的博客 761
上一篇: ​​Vue3 + Element Plus 构建的现代化即时通讯在线客服系统​
下一篇: 基于Vue.js和Golang构建高效在线客服系统:前端实现与后端交互详解
adminwolf
博客等级 码龄2年 124粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值