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

devtools/2025/1/19 6:20:32/

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;}}
});
websocket_115">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);
}
websocket_274">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.ppmy.cn/devtools/151756.html

相关文章

PCB_Layout零基础学习线路

开始学习做一件事情之前&#xff0c;我们一般先回去了解它的历史&#xff0c;从前人的视角去接近它&#xff0c;让它变得不再陌生。那么问题来了&#xff1f; 1.什么是PCB ? 印刷电路板PCB&#xff0c;真的是天才想法吗&#xff1f;_哔哩哔哩_bilibili 了解了PCB之后我…

2025.1.15——假期回归训练,从sql注入开始|一、SQL整数型注入

第一阶段&#xff08;2025.1.15-2025.1.27&#xff09; 题目来源&#xff1a;CTFHub技能树。 “磨刀不误砍柴工” 所有题目的相同步骤&#xff1a;①整理已知信息&#xff1b;②联系相关信息&#xff1b;③用所学知识判断题型&#xff1b;④解题 目录 第一阶段&#xff08…

电机驱动-标准库和HAL库

一、标准库 Motor.c-标准库 #include "stm32f10x.h" // Device header #include "PWM.h"/*** 函 数&#xff1a;直流电机初始化* 参 数&#xff1a;无* 返 回 值&#xff1a;无*/ void Motor_Init(void) {RCC_APB2PeriphClockCmd…

python学opencv|读取图像(三十四)阈值处理-彩色图像

【1】引言 前序已经掌握了使用阈值处理函数控制灰度图的RGB值&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;三十三&#xff09;阈值处理图像-限定像素-CSDN博客 在更早的学习中&#xff0c;灰度图的RGB只有一个通道&#xff0c;也就是各个像素点…

Unity3D 移动端CPU端性能调优详解

前言 在Unity3D开发中&#xff0c;特别是在移动端&#xff0c;性能优化至关重要。CPU主要负责逻辑运算、物理计算和碰撞检测等核心任务。优化CPU性能不仅能提升游戏的流畅度&#xff0c;还能减少电量消耗和发热问题。本文将详细介绍Unity3D移动端CPU端的性能调优技术&#xff…

CMD批处理命令入门(6)——常用的特殊字符

CMD批处理命令入门&#xff08;6&#xff09;——特殊字符 本章内容主要学习要点&#xff1a;重定向符 >、>>命令管道符 |组合命令 &、&&、||转义字符 ^变量引导符 %界定符 "" 本章内容主要学习要点&#xff1a; >、>>重定向符| 命令…

深入剖析Java垃圾回收机制

深入剖析Java垃圾回收机制 在现代软件开发中&#xff0c;内存管理是一个至关重要的话题。Java作为广泛使用的编程语言&#xff0c;以其自动化的内存管理机制&#xff0c;特别是垃圾回收机制&#xff0c;广受欢迎。然而&#xff0c;许多开发者对垃圾回收的工作原理、不同算法的…

阿里云 Serverless 助力盟主直播:高并发下的稳定性和成本优化

在直播场景中&#xff0c;阿里云 Serverless 应用引擎 SAE 提供的无缝弹性伸缩与极速部署能力&#xff0c;确保直播间高并发时的流畅体验&#xff0c;降低了我们的运营成本&#xff0c;简化了运维流程。结合阿里云云原生数据库 PolarDB 的 Serverless 能力&#xff0c;实现了数…