uniapp:小白1分钟学会使用webSocket(可无脑复制)

news/2024/5/19 5:53:06

uni.connectSocket()
uni.$emit页面通信
项目中使用uni.connectSocket()创建webSocket的总结,代码可无脑复制,直接使用。

1、main.js 引入vuex

import store from './store';
Vue.prototype.$store = store;

vuex中封装webSocket

2、vuex的:index.js

import Vue from 'vue';
import Vuex	from 'vuex';
// 模块
import chat from './modules/chat';
Vue.use(Vuex);
const store = new Vuex.Store({modules: {chat,}
});
export default store;

3、vuex的chat

import Vue from 'vue';
export default {namespaced: true,state: {socketUrl:'wss://api.****.com/wss/default.io', // socke链接isclose: false, // 是否已连接reconnections: 0, // 连接次数heartbeatInterval: null, // 心跳检测},mutations: {},actions: {// 开始或重启即时通讯,全局监听async start({state, dispatch, rootState}){// 如果已连接,关闭重新连接uni.onSocketOpen(()=> {state.isclose = true;});if (state.isclose) {uni.closeSocket();uni.onSocketClose((res)=> {clearInterval(state.heartbeatInterval)state.heartbeatInterval = nullconsole.log('已经连接中的Socket关闭成功')});}// 获取token省略,自行请求接口并赋值,这里只是快速演示如何:创建一个 WebSocket 连接let token = 'eyJ0****c1Ng'if(token){let url = `${state.socketUrl}?token=${token}`uni.connectSocket({url});}else{console.log('未获取到token');}// 监听 WebSocket 连接打开事件uni.onSocketOpen((res)=> {console.log('新创建的Socket连接成功');});// 监听WebSocket错误。uni.onSocketError((res)=> {state.reconnections += 1;if (state.reconnections <= 3) {console.log(`连接失败,正在尝试第${state.reconnections}次连接`);dispatch('start');}else{console.error('已尝试3次重新连接均未成功');}});// 监听socket接受到服务器的消息事件uni.onSocketMessage((res)=> {let getData = JSON.parse(res.data)if(getData.event == 'connect'){// 心跳state.heartbeatInterval = setInterval(()=>{uni.sendSocketMessage({data: '{"event":"heartbeat"}'});},5000)}// 通过uni.$emit触发全局的自定义事件,并在页面中通过uni.$on接收数据if(getData.event == 'event_talk'){uni.$emit('getMsg',getData.content); // 更新消息内容uni.$emit('getList',getData.content); // 更新消息列表}});}}
}

4、login:登录页面

// 登录接口,登录成功后,存储token,执行chat/start
this.$http.post('/api/').then(res=>{// 存储tokenuni.setStorageSync('token', res.token);this.$store.dispatch('chat/start');
})

5、聊天页面

<script>export default {data() {return {}},onUnload() {// 卸载监听uni.$off('getMsg')uni.$off('getList')},onLoad() {// 收到更新消息uni.$on('getMsg', data => {console.log('收到消息的监听getMsg:',data);})// 收到更新列表uni.$on('getList', data => {console.log('收到消息的监听getList:',data);})},}
</script>

在这里插入图片描述


http://www.mrgr.cn/p/20627881

相关文章

第十五届蓝桥杯省赛第二场C/C++B组G题【最强小队】题解

20pts 枚举所有可能的左端点、右端点&#xff0c;时间复杂度 O ( n 2 ) O(n^2) O(n2)。 对于每个区间进行遍历检测&#xff0c;时间复杂度 O ( n 3 ) O(n^3) O(n3)。 100pts 由于数据范围为 1 0 5 10^5 105&#xff0c;所以肯定只能进行一次枚举。 我们尝试枚举右端点&…

【第3节】“茴香豆“:搭建你的 RAG 智能助理

目录 1 基础知识1.1.RAG技术的概述1.2 RAG的基本结构有哪些呢&#xff1f;1.3 RAG 工作原理&#xff1a;1.4 向量数据库(Vector-DB )&#xff1a;1.5 RAG常见优化方法1.6RAG技术vs微调技术 2、茴香豆介绍2.1应用场景2.2 场景难点2.3 茴香豆的构建&#xff1a; 3 论文快读 1 基础…

前端框架技术调研

目前程序员使用前端框架最多的是哪一个&#xff1f;

[Flutter3] 记录Dio的简单封装(一)

文章目录 效果使用ResponseEntity类DioManager封装_onResponse / _onDioException 的设计Response的处理catch处理 效果 请求成功/失败/异常的日志输出效果 成功: 失败:500 失败:404 网络异常: 使用 举个使用的例子, 在调用 DioManager的时候, 直接通过返回值的状态, 来…

jenkins修改全局安全配置之后登录错误

教训&#xff08;流泪&#xff09; 事情是这样的&#xff0c;第一次我需要用单点登录集成jenkins&#xff0c;jenkins可以通过插件的方式支持cas协议&#xff0c;我当时也不很懂&#xff0c;经过我学网上的一顿乱配置&#xff0c;jenkis上不去了&#xff0c;虽然这是公司本地环…

常见Bug和问题定位

依赖冲突导致的问题定位 主要流程 现象: 项目提示某个依赖的方法不存在, 通过点击源码发现是存在的, 可能是依赖冲突导致的 猜测: 即使IDEA点击进去是一个版本,但是可能实际中打包编译的使用的是另一个版本导致找不到源码的对应方法 解决思路: 查看对应的日志提示看具体是…

Caused by: java.lang.ClassNotFoundException: org.junit.runner.manipulation.Filter问题的解决

问题描述问题解决 后来经过查阅资料发现,是这里出现了问题:只需要将JUnit的路径更改到classpath下面就可以啦:问题完美解决!

games101-3 BRDF101

BRDF101 概述 本文基于知乎Maple对brdf的文章,在此基础又收集了一些其它来源的关于brdf的文章,希望能够完全理解记忆相关知识 关于Jakub Boksansky的文章,看的过程中又去搜集了很多其它文章来理解,发现已经超出了我目前的知识厚度,因此只会简单的翻译一下我能理解的部分,…

开源相机管理库Aravis例程学习(四)——multiple-acquisition-signal

本文针对Aravis官方例程中的:02-multiple-acquisition-signal做简单的讲解,并介绍其中部分函数目录简介例程代码函数说明g_main_loop_newg_main_loop_rung_main_loop_quitg_signal_connectarv_stream_set_emit_signalsQ&A回调函数的同步调用与异步调用帧丢失问题 简介 本…

Redis:报错Creating Server TCP listening socket *:6379: bind: No error

错误&#xff1a; window下启动redis服务报错&#xff1a; Creating Server TCP listening socket *:6379: bind: No error 原因&#xff1a; 端口6379已被绑定&#xff0c;应该是因为上次未关闭服务 解决&#xff1a; ①依次输入命令&#xff1a; redis-cli.exe &#xff08…

机器学习-期末复习

本文的内容按照作者的课程考试要求书写&#xff0c;仅供复习参考。&#x1f337;&#x1f337;&#x1f337;欢迎大家指正&#xff01; 机器学习是一种人工智能&#xff08;AI&#xff09;的分支领域&#xff0c;它致力于开发能够通过数据学习和改进的算法和模型。简而言之&…

openCV 图像清晰度检测

图像清晰度评价算法有很多种,在空域中,主要思路是考察图像的领域对比度,即相邻像素间的灰度特征的梯度差;在频域中,主要思路是考察图像的频率分量,对焦清晰的图像高频分量较多,对焦模糊的图像低频分量较多。 这里实现3种清晰度评价方法,分别是Tenengrad梯度方法、Lapla…

BSV区块链协会上线首个版本的ARC交易处理器

​​发表时间&#xff1a;2024年3月28日 BSV区块链协会近期上线了首个版本的ARC交易处理器。ARC是一项区块链交易处理服务&#xff0c;能在通过P2P网络广播交易之前验证并存储相关的交易。一旦新区块被挖出&#xff0c;一条与该交易相关的Merkle路径将被发回给交易发起者作为确…

Linux:VMware切换仅主机模式并配置静态IP

配置网络编辑器 点击“编辑”->“虚拟网络编辑器”没有仅主机模式的话,可以通过“添加网络”进行新增网络配置。更改虚拟机网路模式 右键“创建的虚拟就”->“设置”登录虚拟机配置静态IP 切换目录到“/etc/sysconfig/network-scripts/”修改“if-ens33”文件TYPE=Ether…

日志服务 HarmonyOS NEXT 日志采集最佳实践

背景信息 随着数字化新时代的全面展开以及 5G 与物联网(IoT)技术的迅速普及,操作系统正面临前所未有的变革需求。在这个背景下,华为公司自主研发的鸿蒙操作系统(HarmonyOS)应运而生,旨在满足万物互联时代的多元化设备接入、高效协同和安全可靠运行的需求。 HarmonyOS 不…

鸿蒙HarmonyOS应用 - ArkUI组件

ArkUI组件 基础组件 Image 声明Image组件并设置图片源 网络权限&#xff1a;ohos.permission.INTERNET Image(scr: string | PixelMap | Resource)// 1. string&#xff1a;用于加载网络图片&#xff0c;需要申请网络权限 Image("https://xxx.png")// 2. PixelMap…

[IOI2019] 景点划分

连通块划分令人忍俊不禁的是,11 月的模拟赛出现了 “摩拉克斯” 一题,被取之。2 月 JOISC 出现这个模型,被取之。2 月模拟赛出现这个模型,被取之。本题再次出现这个模型,被取之。 呃呃呃呃呃呃呃呃呃啊。 首先进行一些简单的分析:令 \(A\le B\le C\),构造 \(A,B\) 合法的…

新恒盛110kV变电站智能辅助系统综合监控平台+道巡检机器人

江苏晋控装备新恒盛化工有限公司是晋能控股装备制造集团有限公司绝对控股的化工企业&#xff0c;公司位于江苏省新沂市。新恒盛公司40•60搬迁项目在江苏省新沂市经济开发区化工产业集聚区苏化片区建设&#xff0c;总投资为56.64亿元&#xff0c;该项目是晋能控股装备制造集团重…

pnpm - Failed to resolve loader: cache-loader. You may need to install it.

起因 工作原因需要研究 vue-grid-layout 的源码&#xff0c;于是下载到本地。因为我习惯使用 pnpm&#xff0c;所以直接用 pnpm i 安装依赖&#xff0c;npm run serve 启动失败。折腾了一番没成功。 看到源码里有 yarn.lock&#xff0c;于是重新用 yarn install 安装依赖&…

网络拓扑—WEB-IIS服务搭建

均使用Windows Server 2003进行搭建目录WEB-IIS服务搭建网络拓扑配置网络IISPC安装IIS服务配置IIS服务(默认站点)PC机访问网页配置IIS服务(新建站点)PC机访问网页 WEB-IIS服务搭建 网络拓扑//交换机忽略不计 IIS服务IP:192.168.1.1 PC机IP:192.168.1.2配置网络 IISPC安装…