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

uniapp socket 封装 (可拿去直接用)

示例代码:

class WebSocketClient {constructor(url, options = {}) {this.url = url;this.options = options;this.socket = null;this.reconnectAttempts = 0;this.maxReconnectAttempts = options.maxReconnectAttempts || 5;this.reconnectInterval = options.reconnectInterval || 5000;this.heartbeatInterval = options.heartbeatInterval || 30000;this.heartbeatTimer = null;this.messageQueue = [];this.eventListeners = {};this.isConnected = false;}connect() {this.socket = uni.connectSocket({url: this.url,success: () => {uni.onSocketOpen((res) => {this.isConnected = true;this.reconnectAttempts = 0;this.startHeartbeat();this.flushMessageQueue();this.emit('open');})uni.onSocketMessage((res) => {this.emit('message', res.data);})uni.onSocketClose((res)=>{this.isConnected = false;this.stopHeartbeat();this.emit('close');this.handleReconnect();})uni.onSocketError((error)=>{this.emit('error', error);})}});console.log(this.socket);}send(message) {if (this.isConnected) {uni.sendSocketMessage({data: JSON.stringify(message)})} else {this.messageQueue.push(message);}}flushMessageQueue() {while (this.messageQueue.length > 0 && this.isConnected) {const message = this.messageQueue.shift();uni.sendSocketMessage({data: JSON.stringify(message)})}}startHeartbeat() {this.stopHeartbeat();this.heartbeatTimer = setInterval(() => {if (this.isConnected) {this.send({type: 'heartbeat'});}}, this.heartbeatInterval);}stopHeartbeat() {if (this.heartbeatTimer) {clearInterval(this.heartbeatTimer);this.heartbeatTimer = null;}}handleReconnect() {if (this.reconnectAttempts < this.maxReconnectAttempts) {this.reconnectAttempts++;setTimeout(() => {this.connect();}, this.reconnectInterval);}}on(event, callback) {if (!this.eventListeners[event]) {this.eventListeners[event] = [];}this.eventListeners[event].push(callback);}off(event, callback) {if (this.eventListeners[event]) {this.eventListeners[event] = this.eventListeners[event].filter((cb) => cb !== callback);}}emit(event, ...args) {if (this.eventListeners[event]) {this.eventListeners[event].forEach((callback) => {callback(...args);});}}close() {this.stopHeartbeat();this.socket.close({});}
}export default WebSocketClient;

使用方式:

//地址和后端约定好就行
const socket = new WebSocketClient('wss://example.net/websocket')
socket.connect() //连接
socket.send({//这里写后端需要的东西
})
//这里不一定是 message,和后端约定好
socket.on('message',(res)=>{})socket.startHeartbeat() //开始心跳
socket.stopHeartbeat() //结束心跳
socket.close() //关闭socket

http://www.dtcms.com/a/264739.html

相关文章:

  • 可编辑33页PPT | 某材料制造企业工业互联网平台解决方案
  • 云原生环境下部署大语言模型服务:以 DeepSeek 为例的实战教程
  • 6种iOS开发中常用的设计模式
  • Qt designer坑-布局内子控件的顺序错乱
  • 量化交易学习之自动化交易策略 [freqtrade 框架学习] ,常见问题避坑指南!!!!
  • <u>#12288;#8203;</u> HTML5全角空格,自动换行,半角用#32;#8203;
  • Spring AI Advisor RAG使用指南
  • Android Auto即将带来变革
  • AI大模型:从编码助手到流程重构者——软件开发新范式解析
  • 【前端】1 小时实现 React 简历项目
  • 多种方法实现golang中实现对http的响应内容生成图片
  • MySQL间隙锁详解:解决幻读的「隐形守护者」
  • React 学习(2)
  • 03-JS资料
  • 企业需要什么样的远程桌面管理软件?
  • 不引入变量 异或交换的缺点
  • 替代进口SCA7606【智芯微】国产高精度电流传感器 工业新能源电网专用
  • openai-agents记忆持久化(neo4j)
  • WPF学习笔记(21)ListBox、ListView与控件模板
  • 深入理解 LoRA:大语言模型微调的低秩魔法
  • PyTorch 不支持旧GPU的异常状态与解决方案:CUDNN_STATUS_NOT_SUPPORTED_ARCH_MISMATCH
  • Spring Boot 高并发框架实现方案:数字城市的奇妙之旅
  • 智能物流革命:Spring Boot+AI实现最优配送路径规划
  • Knife4j+Axios+Redis:前后端分离架构下的 API 管理与会话方案
  • 【Java关系映射入门】实战一
  • gin如何返回html
  • Java面试宝典:集合一
  • 生僻字写入oracle后被转为??
  • (一)大语言模型的关键技术<-AI大模型构建
  • 在浏览器输入url,会发送什么事情?