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

【vue3+Typescript】unapp+stompsj模式下替代plus-websocket的封装模块

由于plus-websocket实测存在消息丢失的问题,只能寻找替代的方案,看文章说使用原生的即可很好的工作。而目前在stompjs里需要使用websocket类型的封装模块,看了下原来提供的接口,采用uniapp原生的websocket模式,对原模块进行了重新封装,最终单元模块如下:

ccWebsocket.ts:

import { IStompSocket } from '@stomp/stompjs'let socket: UniApp.SocketTask/*** uniapp WebSocket Polyfill* @Jim 2024/11/23*/
class WebSocketPolyfill implements IStompSocket {constructor(url) {// 创建连接this.url = urlif (socket) {socket.onClose = () => {} // 清理侦听socket.close({}) // 正常关闭}socket = uni.connectSocket({url,success: (res) => {console.log('连接创建成功:', res)},fail: (err) => {console.error('连接创建失败:', err)}})socket.onOpen((res) => {console.log('连接已开启', res)this.onopen(res)})socket.onClose((res) => {console.log('连接已关闭', res)this.onclose(res)})socket.onError((res) => {console.log('连接错误', res)this.onclose(res) // 出错断开重连,因为uniapp原生onclose监听不到})socket.onMessage((res) => {this.onmessage(res)})}url: stringget readyState(): number {return (socket as any).readyState}/*** 连接开启回调,会被StompHandler接管*/onopen(res) {}/*** 连接关闭回调,会被StompHandler接管*/onclose(res) {}/*** 连接异常回调,会被StompHandler接管*/onerror(res) {}/*** 接收消息回调,会被StompHandler接管*/onmessage(res) {}/*** 发送消息*/send(data) {if (socket) {socket.send({data,success: () => {// console.log('消息发送成功:', data)},fail: (err) => {console.error('消息发送失败:', err)}})}}/*** 关闭连接*/close() {if (socket) {socket.close({success: () => {console.log('连接关闭成功')},fail: (err) => {console.error('连接关闭失败:', err)}})}}/*** 检查是否已连接*/connected() {const nativeSocket = socket as any// console.log('检查连接状态:', nativeSocket.readyState)return socket && nativeSocket.readyState === 1}
}export default WebSocketPolyfill

实测在IOS和Android下能很好工作,不会丢失消息了,能自动重连。另外心跳也能正常工作了不用另建立一个线程处理

http://www.lryc.cn/news/492262.html

相关文章:

  • Tcon技术和Tconless技术介绍
  • C#-利用反射自动绑定请求标志类和具体执行命令类
  • 高中数学练习:初探均值换元法
  • 数据结构单链表,顺序表,广义表,多重链表,堆栈的学习
  • 【保姆级教程】使用lora微调LLM并在truthfulQA数据集评估(Part 2.在truthfulQA上评估LLM)
  • thinkphp中对请求封装
  • leetcode hot100【LeetCode 215.数组中的第K个最大元素】java实现
  • 簡單易懂:如何在Windows系統中修改IP地址?
  • Python中的23种设计模式:详细分类与总结
  • 日历使用及汉化——fullcalendar前端
  • 视频截断,使用 FFmpeg
  • 使用系统内NCCL环境重新编译Pytorch
  • 1. Klipper从安装到运行
  • docker 卸载与安装
  • 跨部门文件共享安全:平衡协作与风险的关键策略
  • 基于单片机的智慧小区人脸识别门禁系统
  • 【es6】原生js在页面上画矩形及删除的实现方法
  • 【git实践】分享一个适用于敏捷开发的分支管理策略
  • Redis与MySQL如何保证数据一致性
  • 基于微信小程序的教室预约系统+LW示例参考
  • Linux 安装 Git 服务器
  • 总结:Yarn资源管理
  • Python学习34天
  • 深入浅出 WebSocket:构建实时数据大屏的高级实践
  • 三开关VUE组件
  • SpringCloud+SpringCloudAlibaba学习笔记
  • 牛客小白月赛105(A~E)
  • OSPF协议整理
  • Java中的多线程
  • 什么是聚簇索引、非聚簇索引、回表查询