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

uniapp使用WebSocket uniapp使用WebSocket Uniapp整合WebSocket uniapp使用 websocket

uniapp使用WebSocket uniapp使用WebSocket Uniapp整合WebSocket uniapp使用 websocket

  • 前言
  • 1、Socket.js
  • 2、main.js引入
  • 3、组件中调用

前言

代码中的示例只在 H5、APP环境下成功运行,小程序环境下如果无效,需要使用预编译 - 条件性的编译,适配 小程序环境


// #ifdef MP-WEIXIN
// #endif

Uni-app 支持多种预编译指令,包括但不限于:

  • #ifdef H5:针对 Web H5页面。
  • #ifdef APP-PLUS:针对原生应用(Android 和 iOS)。
  • #ifdef MP-WEIXIN:针对微信小程序。
  • #ifdef MP-ALIPAY:针对支付宝小程序。
  • #ifdef MP-Baidu:针对百度小程序。
  • #ifdef MP-Toutiao:针对字节跳动小程序。
  • #ifdef MP-QQ:针对 QQ 小程序。
  • #ifdef MP-Kuaishou:针对快手小程序。
  • #ifdef MP-JD:针对京东小程序。

1、Socket.js

// config.js 文件位于 uniapp根目录全局文件,如果没有,则固定将socket地址手动写死
import config from '@/config'const socketUrl = config.baseSocketUrl// 重试最大次数, 避免出现网络错误停留在页面 出现无限socket重连导致 浏览器卡死
const retryMaxTimes = 10let retryTimes = 1class WebSocketClass {constructor() {this.lockReconnect = false; // 是否开始重连this.wsUrl = ""; // ws 地址// this.globalCallback = this.globalCallback(); // 回调方法this.userClose = false; // 是否主动关闭this.createWebSocket(socketUrl);}createWebSocket(url) {// #ifdef H5if (typeof(WebSocket) === 'undefined') {this.writeToScreen("您的浏览器不支持WebSocket,无法获取数据");return false}// #endif// #ifdef APP-PLUSif (typeof(uni.connectSocket) === 'undefined') {this.writeToScreen("您的浏览器不支持WebSocket,无法获取数据");return false}// #endifthis.wsUrl = url;try {// 创建一个this.ws对象【发送、接收、关闭socket都由这个对象操作】// #ifdef H5this.ws = new WebSocket(this.wsUrl);// 更改消息数据格式为 arraybufferthis.ws.binaryType = 'arraybuffer';this.initEventHandle();// #endif// #ifdef APP-PLUSthis.ws = uni.connectSocket({url: this.wsUrl,success(data) {console.log("websocket连接成功");// 更改消息数据格式为 arraybufferthis.ws.binaryType = 'arraybuffer';this.initEventHandle();},});// #endif} catch (e) {this.reconnect(url);}}// 初始化initEventHandle() {var _this = this_this.ws.binaryType = 'arraybuffer';console.info(_this)/*** 监听WebSocket连接打开成功*/// #ifdef H5_this.ws.onopen = (event) => {console.log("WebSocket连接打开");};// #endif// #ifdef APP-PLUS_this.ws.onOpen(res => {console.log('WebSocket连接打开');});// #endif/*** 连接关闭后的回调函数*/// #ifdef H5_this.ws.onclose = (event) => {if (!_this.userClose) {_this.reconnect(_this.wsUrl); //重连}};// #endif// #ifdef APP-PLUS_this.ws.onClose(() => {if (!_this.userClose) {_this.reconnect(_this.wsUrl); //重连}});// #endif/*** 报错时的回调函数*/// #ifdef H5_this.ws.onerror = (event) => {if (!_this.userClose) {_this.reconnect(_this.wsUrl); //重连}};// #endif// #ifdef APP-PLUS_this.ws.onError(() => {if (!_this.userClose) {_this.reconnect(_this.wsUrl); //重连}});// #endif/*** 收到服务器数据后的回调函数*/// #ifdef H5_this.ws.onmessage = (event) => {if (_this.isJSON(event.data)) {const jsonobject = JSON.parse(event.data)_this.globalCallback(jsonobject)} else {_this.globalCallback(event.data)}};// #endif// #ifdef APP-PLUS_this.ws.onMessage(event => {if (_this.isJSON(event.data)) {const jsonobject = JSON.parse(event.data)_this.globalCallback(jsonobject)} else {_this.globalCallback(event.data)}});// #endif}// 关闭ws连接回调reconnect(url) {if (this.lockReconnect) return;this.ws.close();this.lockReconnect = true; // 关闭重连,没连接上会一直重连,设置延迟避免请求过多if (retryTimes < retryMaxTimes) {retryTimes = retryTimes + 1console.info('WebSocket当前重试次数', retryTimes)setTimeout(() => {this.createWebSocket(url);this.lockReconnect = false;}, 1000);}else{console.info('WebSocket当前已经重试最大次数,依旧无法连接,不在重试,请检查网络是否正常')}}// 发送信息方法webSocketSendMsg(msg) {this.ws.send(JSON.stringify(msg));}// 获取ws返回的数据方法getWebSocketMsg(callback) {this.globalCallback = callback}globalCallback(data) {return new Promise((resolve, reject) => {resolve(data); // 成功时调用resolve});}// 关闭ws方法closeSocket() {if (this.ws) {this.userClose = true;this.ws.close({success(res) {console.log("关闭成功", res)},fail(err) {console.log("关闭失败", err)}});}}writeToScreen(massage) {console.log(massage);}isJSON(str) {if (typeof str == 'string') {try {var obj = JSON.parse(str);if (typeof obj == 'object' && obj) {return true;} else {return false;}} catch (e) {// console.log('error:'+str+'!!!'+e);return false;}}// console.log('It is not a string!')}
}
export default WebSocketClass;

2、main.js引入

import WS from "@/utils/socket.js"
const ws = new WS()Vue.prototype.$ws = wsconst app = new Vue({...App
})

3、组件中调用

	export default {data() {return {}},mounted() {const _t = this// 发送消息_t.$ws.webSocketSendMsg({'msg': 'hello'})// 监听服务端发送的消息_t.$ws.getWebSocketMsg((res) => {console.info('接收消息', res)})}}

相关文章:

uniapp使用WebSocket uniapp使用WebSocket Uniapp整合WebSocket uniapp使用 websocket

uniapp使用WebSocket uniapp使用WebSocket Uniapp整合WebSocket uniapp使用 websocket 前言1、Socket.js2、main.js引入3、组件中调用 前言 代码中的示例只在 H5、APP环境下成功运行&#xff0c;小程序环境下如果无效&#xff0c;需要使用预编译 - 条件性的编译&#xff0c;适…...

SSH Exporter:基于Prometheus的远程系统性能监控神器

SSH Exporter English | 中文 介绍 SSH Exporter 是一个基于 Prometheus 规范的监控工具&#xff0c;通过 SSH 协议远程收集目标服务器的系统性能数据&#xff0c;如 CPU 使用率、内存使用情况、磁盘和网络 I/O 等&#xff0c;并将这些数据暴露为 Prometheus 格式的 metrics…...

Docker基础概念

Docker 是一个流行的容器化平台&#xff0c;它使开发者能够打包他们的应用程序及其依赖项到一个轻量级、可移植的容器中。这有助于确保应用程序无论在哪里运行都能获得一致的结果。以下是 Docker 的几个基础概念的详细解释&#xff1a; 1. Docker 镜像 (Image) 定义: Docker …...

小白进阶为大神

编程已成为当代大学生的必备技能&#xff0c;但面对众多编程语言和学习资源&#xff0c;新生们常常感到迷茫。如何选择适合自己的编程语言&#xff1f;如何制定有效的学习计划&#xff1f;如何避免常见的学习陷阱&#xff1f;今天&#xff0c;我就来分享一下这方面的经验和知识…...

2024最新Python和PyCharm的安装教程

Python和PyCharm的安装教程如下&#xff1a; Python安装教程 一、下载Python安装包 访问Python官方网站&#xff1a;Welcome to Python.org。 点击页面上方的“Downloads”链接。 在下载页面&#xff0c;选择“Windows”系统&#xff08;以Windows系统为例&#xff09;&…...

数据库死锁:深入解析与应对策略

在数据库管理系统中&#xff0c;死锁是一个常见且棘手的问题&#xff0c;它可能导致系统性能下降、事务延迟甚至完全阻塞。本文将深入探讨数据库死锁的概念、产生原因、检测方法以及预防与解决策略&#xff0c;帮助读者更好地理解和应对这一挑战。 一、什么是数据库死锁&#…...

Python入门宝藏《看漫画学Python》,495页漫画带你弄清python知识点!简单易懂 | 附PDF全彩版

华为出品的《看漫画学Python》全彩PDF教程是一本适合Python初学者的学习资料&#xff0c;通过漫画的形式将复杂的Python技术问题简单化&#xff0c;使学习过程更加生动有趣。以下是对该教程的内容简介、本书概要及本书目录的详细解析&#xff1a; 内容简介 《看漫画学Python》…...

Webshell管理工具:AntSword(中国蚁剑)

中国蚁剑是一款开源的跨平台网站管理工具&#xff0c;它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。 通俗的讲&#xff1a;中国蚁剑是 一 款比菜刀还牛的shell控制端软件。 一、中国蚁剑下载 1. 下载 AntSword-Loader https://github.com/AntSwordP…...

Java 中的File类

路径分为绝对路径和相对路径。 相对路径肯定是相对谁来说的&#xff0c;一般是一个文件相对于另外一个文件而言的路径。 下面是一个例子&#xff0c;比如index.htm如何找到photo.jpg呢&#xff1f; c:/website/web/index.htmc:/website/img/photo.jpg 所以在index.htm中使用…...

java将map转json字符串或者再将json字符串转回map,java将对象转json字符串或者互想转换,对象集合和json字符串互转

1.导入hutool工具依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency>2.直接复制一下代码运行 import cn.hutool.json.JSONUtil;import java.util.Ar…...

数据库管理-第225期 Oracle DB 23.5新特性一览(20240730)

数据库管理225期 2024-07-30 数据库管理-第225期 Oracle DB 23.5新特性一览&#xff08;20240730&#xff09;1 二进制向量维度格式2 RAC上的复制HNSW向量索引3 JSON集合4 JSON_ID SQL函数5 优化的通过网络对NVMe设备的Oracle的原生访问6 DBCA支持PMEM存储7 DBCA支持标准版高可…...

提高生产效率:最佳7大Bug记录工具

本文将分享2024年值得关注的7款Bug记录工具&#xff1a;PingCode、Worktile、禅道、Tapd、CODING、JIRA、Bugzilla。 Bug的管理和跟踪是一个不断挑战的任务&#xff0c;而一个高效的Bug记录工具不仅可以提高团队的生产效率&#xff0c;还能显著降低项目延误的风险。选择合适的工…...

DDOS攻击学习 - kali初学

文章目录 本地ssh配置nmap(网络连接的工具)nmap -sP IP地址nmap -p 1-65535 -A IP地址主机发现Ping扫描端口扫描时序扫描常用扫描方式 指纹识别与探测全端口版本探测防火墙/IDS逃逸报文分段 信息收集IP信息收集WHOIS查询 数据库渗透测试MySQL列举数据库列举MySQL变量 发起请求目…...

【C++】类和对象——流插入和流提取运算符重载

目录 前言ostream和istream自定义类型的流插入重载自定义类型的流提取重载解决私有问题日期类总接口 前言 我们在上一节实现日期类时&#xff0c;在输入和输出打印时&#xff0c;经常会调用两个函数&#xff1a; void Insert()//输入函数{cin >> _year;cin >> _mo…...

Vmware ubuntu20.04 虚拟文件夹

目录 1.vmware 设置 2.ubuntu设置 1.vmware 设置 设置完成后我们开机 2.ubuntu设置 我们打开终端 输入命令 vmware-hgfsclient可以看到你当前的共享文件 然后我们输入以下命令&#xff0c;用于将共享文件夹挂载到虚拟机中 sudo vmhgfs-fuse .host:/ /mnt -o nonempty -o …...

人工智能学习笔记 - 初级篇Ⅱ - 图形可视化 - 第11节: 绘制带填充区域的图表

微信公众号&#xff1a;御风研墨 关注可了解更多。问题或建议&#xff0c;请公众号留言 文章目录 绘制带填充区域的图表应用背景准备工作操作步骤工作原理补充说明最后 绘制带填充区域的图表 应用背景 在数据可视化中&#xff0c;带填充区域的图表可以有效地表示数据范围、趋…...

使用STM32实现一个线性代数计算器

文章目录 背景挑战与困难如何整合编译&#xff1f;error: non-ASM statement in naked function is not supportederror: #pragma import is an ARM Compiler 5 extension, and is not supported by ARM Compiler 6error: redefinition of __FILE 改造demo中的cout改造delete运…...

我在高职教STM32——串口通信(4)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思的教学设计分享…...

Redis 缓存中间件 缓存数据库

Redis 缓存中间件 缓存数据库 nginx web服务 PHP 转发动态请求 tomcat web页面也可以转发动态请求 springboot 自带tomcat 所有的数据库不支持高并发&#xff0c;一旦访问量激增&#xff0c;数据库很快就会崩溃。 Redis 非关系型数据库 nosql not only sql 不仅仅是sql 键值对…...

51、PHP 实现简单的快速排序

题目&#xff1a; PHP 实现简单的快速排序 描述&#xff1a; function simpleQuickSort(array $list) {$length count($list);if( $length < 1){return $list;}else{$pivot $list[0];$left_list array();$right_list array();for($i 1; $i < $length; $i){if($lis…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

数据挖掘是什么?数据挖掘技术有哪些?

目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...

CppCon 2015 学习:Simple, Extensible Pattern Matching in C++14

什么是 Pattern Matching&#xff08;模式匹配&#xff09; ❝ 模式匹配就是一种“描述式”的写法&#xff0c;不需要你手动判断、提取数据&#xff0c;而是直接描述你希望的数据结构是什么样子&#xff0c;系统自动判断并提取。❞ 你给的定义拆解&#xff1a; ✴ Instead of …...