vue3使用vue-native-websocket-vue3通讯

vue3使用vue-native-websocket-vue3通讯

      • 插件使用
      • 一、启用Vuex集成
        • 1.在mian.js中
        • 2.store/index.js文件中
        • 3.要websocket使用的页面
      • 二、启用Piain集成
        • 1.在mian.js中
        • 2.根目录下创建store文件夹,分别创建PiniaType.ts,store.ts,useSocketStore.ts文件
          • ①.PiniaType.ts文件
          • ②.store.ts文件
          • ③.useSocketStore.ts文件
        • 3.要websocket使用的页面

插件使用

vue-native-websocket-vue3

安装

npm install vue-native-websocket-vue3 --save

如果你的项目启用了TypeScript,则在main.ts文件中导入并使用插件。

没有启用就在main.js中导入并使用。

使用插件时,第二个参数为必填项,是你的websocket服务端连接地址。

插件必须依赖于Vuex或者pinia任选其一即可。

import VueNativeSock from "vue-native-websocket-vue3";// 使用VueNativeSock插件,并进行相关配置
app.use(VueNativeSock,"");

一、启用Vuex集成

1.在mian.js中
import VueNativeSock from "vue-native-websocket-vue3";
import store from "/@/store";
app.use(VueNativeSock, '你的websocket服务端连接地址', {// 启用pinia集成 | enable pinia integrationstore: store,// 数据发送/接收使用使用jsonformat: "json",// 开启手动调用 connect() 连接服务器connectManually: true,// 开启自动重连reconnection: true,// 尝试重连的次数reconnectionAttempts: 5,// 重连间隔时间reconnectionDelay: 3000
});
export default app;
2.store/index.js文件中
import { createStore } from "vuex";
import main from "../main";
export default createStore({state() {return {socket: {// 连接状态isConnected: false,// 消息内容message: "",// 重新连接错误reconnectError: false,// 心跳消息发送时间heartBeatInterval: 50000,// 心跳定时器heartBeatTimer: 0}};},mutations: {// 连接打开SOCKET_ONOPEN(state, event) {main.config.globalProperties.$socket = event.currentTarget;state.socket.isConnected = true;// 连接成功时启动定时发送心跳消息,避免被服务器断开连接state.socket.heartBeatTimer = window.setInterval(() => {const message = "心跳消息";state.socket.isConnected &&main.config.globalProperties.$socket.sendObj({code: 200,msg: message});}, state.socket.heartBeatInterval);},// 连接关闭SOCKET_ONCLOSE(state, event) {state.socket.isConnected = false;// 连接关闭时停掉心跳消息clearInterval(state.socket.heartBeatTimer);state.socket.heartBeatTimer = 0;console.log("连接已断开: " + new Date());console.log(event);},// 发生错误SOCKET_ONERROR(state, event) {console.error(state, event);},// 收到服务端发送的消息SOCKET_ONMESSAGE(state, message) {state.socket.message = message;},// 自动重连SOCKET_RECONNECT(state, count) {console.info("消息系统重连中...", state, count);},// 重连错误SOCKET_RECONNECT_ERROR(state) {state.socket.reconnectError = true;}}
});
3.要websocket使用的页面
插件暴露的函数
send 发送非json类型的数据(使用插件时不能启用JSON消息传递)
sendObj 发送json类型的数据(必须在使用插件时启用JSON消息传递)
$connect 连接websocket服务器(必须在使用插件时启用手动管理连接选项)
onmessage 收到服务端推送消息时的监听
$disconnect 断开websocket连接移除消息监听
delete proxy.$socket.onmessage
<script setup>
import { onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
onMounted(()=>{proxy.$disconnect();//断开连接proxy.$connect(`你的websocket服务端连接地址`);//连接websocket//收消息proxy.$socket.onmessage = res => {// console.log(res, "我收到的消息");};// 调用send方法,以字符串形式发送数据proxy.$socket.send('some data');// 如果fomat配置为了json,即可调用sendObj方法来发送数据proxy.$socket.sendObj({ msg: 'data'} );
})
</script>

二、启用Piain集成

1.在mian.js中
import { useSocketStoreWithOut } from "/@/store/useSocketStore";
import VueNativeSock from "vue-native-websocket-vue3";
const piniaSocketStore = useSocketStoreWithOut(app);
app.use(VueNativeSock, `你的websocket服务端连接地址`, {// 启用pinia集成 | enable pinia integrationstore: piniaSocketStore,// 数据发送/接收使用使用jsonformat: "json",// 开启手动调用 connect() 连接服务器connectManually: true,// 开启自动重连reconnection: true,// 尝试重连的次数reconnectionAttempts: 5,// 重连间隔时间reconnectionDelay: 3000
});
2.根目录下创建store文件夹,分别创建PiniaType.ts,store.ts,useSocketStore.ts文件
①.PiniaType.ts文件
export type SocketStore = {// 连接状态isConnected: boolean;// 消息内容message: string;// 重新连接错误reconnectError: boolean;// 心跳消息发送时间heartBeatInterval: number;// 心跳定时器heartBeatTimer: number;
};
export type socketType = {$connect: () => void;
};
②.store.ts文件
import { createPinia } from "pinia";
import { App } from "vue";
const store = createPinia();
export function setupStore(app: App<Element>) {app.use(store);
}
export { store };
③.useSocketStore.ts文件
import { App } from "vue";
import { defineStore } from "pinia";
import { setupStore } from "./store";
import { SocketStore } from "./PiniaType";
export const useSocketStore = (app: App<Element>) => {return defineStore({id: "socket",state: (): SocketStore => ({// 连接状态isConnected: false,// 消息内容message: "",// 重新连接错误reconnectError: false,// 心跳消息发送时间heartBeatInterval: 50000,// 心跳定时器heartBeatTimer: 0}),actions: {// 连接打开SOCKET_ONOPEN(event: any) {console.log("successful websocket connection");app.config.globalProperties.$socket = event.currentTarget;this.isConnected = true;// 连接成功时启动定时发送心跳消息,避免被服务器断开连接this.heartBeatTimer = window.setInterval(() => {const message = "心跳消息";this.isConnected &&app.config.globalProperties.$socket.sendObj({code: 200,msg: message});}, this.heartBeatInterval);},// 连接关闭SOCKET_ONCLOSE(event: any) {this.isConnected = false;// 连接关闭时停掉心跳消息window.clearInterval(this.heartBeatTimer);this.heartBeatTimer = 0;console.log("连接已断开: " + new Date());console.log(event);},// 发生错误SOCKET_ONERROR(event: any) {console.error(event);},// 收到服务端发送的消息SOCKET_ONMESSAGE(message: any) {this.message = message;},// 自动重连SOCKET_RECONNECT(count: any) {console.info("消息系统重连中...", count);},// 重连错误SOCKET_RECONNECT_ERROR() {this.reconnectError = true;}}})();
};
// Need to be used outside the setup
export function useSocketStoreWithOut(app: App<Element>) {setupStore(app);return useSocketStore(app);
}
3.要websocket使用的页面
插件暴露的函数
send 发送非json类型的数据(使用插件时不能启用JSON消息传递)
sendObj 发送json类型的数据(必须在使用插件时启用JSON消息传递)
$connect 连接websocket服务器(必须在使用插件时启用手动管理连接选项)
onmessage 收到服务端推送消息时的监听
$disconnect 断开websocket连接移除消息监听
delete proxy.$socket.onmessage
<script setup>
import { onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
onMounted(()=>{proxy.$disconnect();//断开连接proxy.$connect(`你的websocket服务端连接地址`);//连接websocket//收消息proxy.$socket.onmessage = res => {// console.log(res, "我收到的消息");};// 调用send方法,以字符串形式发送数据proxy.$socket.send('some data');// 如果fomat配置为了json,即可调用sendObj方法来发送数据proxy.$socket.sendObj({ msg: 'data'} );
})
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows图形界面(GUI)-QT-C/C++ - Qt控件与布局系统详解

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 Qt布局系统(Layouts) 布局管理器基础 高级布局技巧 嵌套布局 设置间距和边距 常用控件详解 按钮类控件 QPushButton (标准按钮) QRadioButton (单选按钮) QCheckBox (复选框) …

深入理解 ECMAScript 2024 新特性:字符串 isWellFormed 方法

ECMAScript 2024 引入了一个新的字符串实例方法&#xff1a;String.prototype.isWellFormed。这一新增功能是为了帮助开发者更容易地验证字符串是否为有效的 Unicode 文本。本文将详细介绍这一方法的使用场景、实现原理及其在实际应用中的价值。 String.prototype.isWellFormed…

生产管理看板助力节能科技公司实现数据自动化管理

在节能科技公司的生产过程中&#xff0c;数据管理的自动化是提高生产效率和产品质量的关键。然而&#xff0c;许多公司在数据记录、展示、对比和存档方面仍面临诸多痛点&#xff0c;如产品检测数据无法自动记录、缺乏直观的产线状态展示、检测数据对比繁琐耗时&#xff0c;以及…

【C++】B2112 石头剪子布

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述游戏规则&#xff1a;输入格式&#xff1a;输出格式&#xff1a;输入输出样例&#xff1a;解题分析与实现 &#x1f4af;我的做法实现逻辑优点与不足 &#x1f4af…

两分钟解决 :![rejected] master -> master (fetch first) , 无法正常push到远端库

目录 分析问题的原因解决 分析问题的原因 在git push的时候莫名遇到这种情况 若你在git上修改了如README.md的文件。由于本地是没有README.md文件的&#xff0c;所以导致 远端仓库git和本地不同步。 将远端、本地进行合并就可以很好的解决这个问题 注意&#xff1a;直接git pu…

微服务之松耦合

参考&#xff1a;https://microservices.io/post/architecture/2023/03/28/microservice-architecture-essentials-loose-coupling.html There’s actually two different types of coupling: runtime coupling - influences availability design-time coupling - influences…

hot100_240. 搜索二维矩阵 II

hot100_240. 搜索二维矩阵 II 直接遍历列减行增 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,1…

一步到位Python Django部署,浅谈Python Django框架

Django是一个使用Python开发的Web应用程序框架&#xff0c;它遵循MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;旨在帮助开发人员更快、更轻松地构建和维护高质量的Web应用程序。Django提供了强大的基础设施和工具&#xff0c;以便于处理复杂的业务逻…

Apache PAIMON 学习

参考&#xff1a;Apache PAIMON&#xff1a;实时数据湖技术框架及其实践 数据湖不仅仅是一个存储不同类数据的技术手段&#xff0c;更是提高数据分析效率、支持数据驱动决策、加速AI发展的基础设施。 新一代实时数据湖技术&#xff0c;Apache PAIMON兼容Apache Flink、Spark等…

《计算机网络》课后探研题书面报告_了解PPPoE协议

PPPoE协议的工作原理与应用分析 摘 要 PPPoE&#xff08;Point-to-Point Protocol over Ethernet&#xff09;是一种广泛应用于宽带接入的网络协议&#xff0c;特别是在DSL&#xff08;数字用户线路&#xff09;和光纤网络中具有重要的应用价值。PPPoE结合了PPP协议的认证、加…

MAC上安装Octave

1. 当前最新版Octave是9.3版本&#xff0c;需要把mac os系统升级到14版本&#xff08;本人之前的版本是10版本&#xff09; https://wiki.octave.org/Octave_for_macOS octave的历史版本参考此文档&#xff1a;Octave for macOS (outdated) - Octavehttps://wiki.octave.org/Oc…

mysql-5.7.18保姆级详细安装教程

本文主要讲解如何安装mysql-5.7.18数据库&#xff1a; 将绿色版安装包mysql-5.7.18-winx64解压后目录中内容如下图&#xff0c;该例是安装在D盘根目录。 在mysql安装目录中新建my.ini文件&#xff0c;文件内容及各配置项内容如下图&#xff0c;需要先将配置项【skip-grant-tab…

VSCode连接Github的重重困难及解决方案!

一、背景&#xff1a; 我首先在github创建了一个新的项目&#xff0c;并自动创建了readme文件其次在vscode创建项目并写了两个文件在我想将vscode的项目上传到对应的github上时&#xff0c;错误出现了 二、报错及解决方案&#xff1a; 1.解决方案&#xff1a; 需要在git上配置用…

数据分析:非度量多维排列 NMDS (Non-metric multidimensional scaling)ANOSIM检验分析

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍原理步骤加载R包数据下载导入数据数据预处理计算距离矩阵ANOSIM检验非度量多维排列NMDS应力值(stress value)画图输出系统信息介绍 非度量多维排列(Non-metric Multidimensiona…

Open FPV VTX开源之ardupilot配置

Open FPV VTX开源之ardupilot配置 1. 源由2. 配置3. 总结4. 参考资料5. 补充5.1 飞控固件版本5.2 配置Ardupilot的BF OSD5.3 OSD偏左问题 1. 源由 飞控嵌入式OSD - ardupilot配置使用ardupliot配套OSD图片。 Choose correct font depending on Flight Controller SW. ──>…

硬件实用技巧:TPS54331DR横杠标识识别1引脚

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/145116969 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

Linux离线部署ELK

文章目录 前期准备开始安装安装elastic search安装logstash安装kibana 配置ELK配置ElasticSearch配置logstash配置kibana 启动ELK启动命令启动测试 设置ELK策略创建ILM策略将ILM策略与日志index关联查看索引是否被ILM策略管理 前期准备 ELK包含三部分软件 ElasticSearch用作搜…

Node.js - Express框架

1. 介绍 Express 是一个基于 Node.js 的 Web 应用程序框架&#xff0c;主要用于快速、简便地构建 Web 应用程序 和 API。它是目前最流行的 Node.js Web 框架之一&#xff0c;具有轻量级、灵活和功能丰富的特点。 核心概念包括路由&#xff0c;中间件&#xff0c;请求与响应&a…

《光学遥感图像中显著目标检测的多内容互补网络》2021-9

一、简介 在本文中&#xff0c;我们提出了一种新的多内容互补网络 &#xff08;MCCNet&#xff09; 来探索 RSI-SOD 的多内容互补性。具体来说&#xff0c;MCCNet 基于通用的编码器-解码器架构&#xff0c;并包含一个名为 multi-content complementation module &#xff08;MC…

【STM8S】STM8S之自定义短、长、连击按键

本文最后修改时间&#xff1a;2018年10月22日 01:57 一、本节简介 本文介绍STM8S系列如何实现按键的短按、长按、连击。 二、实验平台 编译软件&#xff1a;IAR for STM8 1.42.2 硬件平台&#xff1a;stm8s003f3p6开发板 仿真器&#xff1a;ST-LINK 库函数版本&#xff1a…