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

websocket 服务 pinia 全局配置

websocket 方法类

// stores/webSocketStore.ts
import { defineStore } from "pinia";interface WebSocketStoreState {ws: WebSocket | null; // WebSocket 实例callbacks: ((message: string) => void)[]; // 消息回调函数列表connected: boolean; // 连接状态
}export const useWebSocketStore = defineStore("webSocket", {state: (): WebSocketStoreState => ({ws: null,callbacks: [],connected: false,}),actions: {// 连接 WebSocketconnect(url: string): void {if (this.ws) {console.warn("WebSocket already connected");return;}// 创建 WebSocket 实例this.ws = new WebSocket(url);// 监听连接打开事件this.ws.onopen = () => {console.log("WebSocket connected");this.connected = true;};// 监听消息事件this.ws.onmessage = (event: MessageEvent) => {// console.log("Received message:", event.data);this.callbacks.forEach((callback) => callback(event.data)); // 执行回调};// 监听错误事件this.ws.onerror = (error) => {console.error("WebSocket error:", error);};// 监听连接关闭事件this.ws.onclose = () => {console.log("WebSocket connection closed");this.connected = false;};},// 发送消息send(message: string): void {if (this.ws && this.ws.readyState === WebSocket.OPEN) {this.ws.send(message);} else {console.error("WebSocket is not open");}},// 注册接收消息的回调函数onMessage(callback: (message: string) => void): void {this.callbacks.push(callback);},// 重新连接 WebSocketreconnect(url: string): void {if (url) {console.log("Reconnecting WebSocket...");// 创建 WebSocket 实例this.ws = new WebSocket(url);// 监听连接打开事件this.ws.onopen = () => {console.log("WebSocket connected");this.connected = true;};// 监听消息事件this.ws.onmessage = (event: MessageEvent) => {// console.log("Received message:", event.data);this.callbacks.forEach((callback) => callback(event.data)); // 执行回调};// 监听错误事件this.ws.onerror = (error) => {console.error("WebSocket error:", error);};// 监听连接关闭事件this.ws.onclose = () => {console.log("WebSocket connection closed");this.connected = false;};} else {console.error("No URL available to reconnect");}},// 关闭 WebSocket 连接close(): void {if (this.ws) {this.ws.close();}},},
});

页面中使用例子

<template><div><el-button @click="connectWebSocket">Connect WebSocket</el-button><el-button @click="sendMessage">Send Message</el-button><el-button @click="closeWebSocket">Close WebSocket</el-button><el-button @click="reconnect('ws://localhost:3030')">Reset Connection</el-button><div v-if="webSocketStore.connected">WebSocket is connected</div><div v-else>WebSocket is disconnected</div></div>
</template><script lang="ts">
import { defineComponent } from "vue";
import { useWebSocketStore } from "@/store/webSocketStore"; // 根据实际路径调整export default defineComponent({setup() {// 获取 Pinia storeconst webSocketStore = useWebSocketStore();// 连接 WebSocketconst connectWebSocket = () => {const url = "ws://localhost:3030"; // 替换为实际的 WebSocket URLdebugger;if (!webSocketStore.connected) {webSocketStore.connect(url);}// if (webSocketStore.ws?.readyState != 1) {//   webSocketStore.ws?.onopen;// }};// 发送消息const sendMessage = () => {const message = "Hello, WebSocket!";webSocketStore.send(message);};// 关闭 WebSocketconst closeWebSocket = () => {webSocketStore.close();};const reconnect = (url: string) => {webSocketStore.reconnect(url);};// 注册接收到消息的回调函数webSocketStore.onMessage((message) => {console.log("Received message in component:", message);});return {connectWebSocket,sendMessage,closeWebSocket,reconnect,webSocketStore,connected: webSocketStore.connected, // 从 store 中获取连接状态};},
});
</script>

websocket 服务端 测试实例

1.项目中安装 websocket 模块
npm install ws
2.添加如下服务代码
// 导入必要的模块
const express = require('express');
const http = require('http');
const WebSocket = require('ws');// 创建一个 Express 应用
const app = express();// 创建一个 HTTP 服务器
const server = http.createServer(app);// 创建 WebSocket 服务器,传入 HTTP 服务器对象
const wss = new WebSocket.Server({ server });// WebSocket 连接事件处理
wss.on('connection', (ws) => {console.log('A new client connected.');// 监听客户端发送的消息ws.on('message', (message) => {console.log(`Received message: ${message}`);// 发送消息回客户端ws.send(`${message}`);});// 连接关闭时的处理ws.on('close', () => {console.log('Client disconnected.');});const jsonData = {SendName: "server",ReceiveName: "connectionning client",SendDataInfo: { msg: "welcome connection success", type: "tips" },};const plainData = { ...jsonData };// 发送欢迎消息给客户端ws.send(JSON.stringify(plainData));
});// 设置一个基本的 HTTP 路由
app.get('/', (req, res) => {res.send('Hello, Node.js with WebSocket!');
});// 设置端口并启动服务器
const PORT = process.env.PORT || 3030;
server.listen(PORT, () => {console.log(`Server running on http://localhost:${PORT}`);
});
3. 启动websocket 测试服务端
node server.js

相关文章:

websocket 服务 pinia 全局配置

websocket 方法类 // stores/webSocketStore.ts import { defineStore } from "pinia";interface WebSocketStoreState {ws: WebSocket | null; // WebSocket 实例callbacks: ((message: string) > void)[]; // 消息回调函数列表connected: boolean; // 连接状态…...

基于Springboot企业oa管理系统【附源码】

基于Springboot企业oa管理系统 效果如下&#xff1a; 系统主页面 用户管理页面 公告信息管理页面 客户关系管理页面 车辆信息管理页面 工资信息管理页面 文件信息管理页面 上班考勤管理页面 研究背景 随着信息化时代的到来和企业OA管理理念的更新&#xff0c;企业面临着日益…...

Python遥感开发之地理探测器的实现

Python遥感开发之地理探测器的实现 1 地理探测器介绍2 官方软件实现3 Python代码实现 前言&#xff1a;本篇博客主要介绍使用py_geodetector库来实现地理探测器。 1 地理探测器介绍 官网链接&#xff1a;http://www.geodetector.cn/index.html 地理探测器用于测量和归因空间分…...

【HarmonyOS】 鸿蒙保存图片或视频到相册

【HarmonyOS】 鸿蒙保存图片或视频到相册 前言 鸿蒙中保存图片或者视频&#xff0c;或者其他媒体文件到设备的媒体库&#xff0c;可以是相册&#xff0c;也可以是文件管理等。共有两种方式&#xff1a; 需要应用申请受限权限&#xff0c;获取文件读写的权限&#xff08;调用…...

Apache Echarts和POI

目录 Apache ECharts 介绍 入门 绘制一个简单的图表 Apache POI 介绍 通过POI创建Excel文件并且写入文件内容 通过POI读取Excel文件中的内容 导出Excel表格 Apache ECharts 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xf…...

厦门凯酷全科技有限公司正规吗靠谱吗?

随着短视频和直播电商的迅猛发展&#xff0c;越来越多的企业开始将目光投向抖音这一平台。作为国内领先的短视频社交平台&#xff0c;抖音凭借其庞大的用户基础和强大的算法推荐系统&#xff0c;成为众多品牌拓展市场、提升销售的重要渠道。厦门凯酷全科技有限公司&#xff08;…...

WireShark 下载、安装和使用

1、下载 官网下载太慢&#xff0c;本人另外提供下载地址【下载WireShark】 2、安装 全部默认下一步即可&#xff0c;但如下图所示的这一步值得拿出来说一下。这一步是要你安装Npcap&#xff0c;但是你的电脑如果已经安装了WinPcap&#xff0c;那么可以选择不再安装Npcap。Npca…...

2025周易算命网站搭建详细方法+源码选择php环境的配置

以下是一个详细的搭建教程&#xff0c;包括网站分类、环境配置、程序设计和功能实现。 1. 环境准备 1.1 服务器选择 操作系统: Linux&#xff08;推荐使用Ubuntu或CentOS&#xff09;Web服务器: Nginx数据库: MySQLPHP版本: 7.4.x&#xff08;确保小于8.0&#xff09; 1.2 安…...

共享购模式革新登场:重构消费生态,领航商业新未来

近期&#xff0c;一种创新的商业模式——共享购&#xff0c;在电子商务领域掀起了一股热潮&#xff0c;不仅吸引了广大消费者的目光&#xff0c;也激发了商家和资本市场的浓厚兴趣。共享购模式凭借其独到的消费积分累积与转换体系&#xff0c;正在逐步重塑消费生态&#xff0c;…...

centos kafka单机离线安装kafka服务化kafka tool连接kafka

a.版本&环境 linux版本&#xff1a;centos7.6 kafka: kafka_2.12 zookeeper:zookeeper_3.6.3(之前已经安装:linux zookeeper安装并服务化-CSDN博客) java:1.8(之前已经安装) windows kafka tool: 2.1 b.kafka单机安装 1.切换目录 cd downloads/,利用rz命令&#xff0…...

QT JSON文件解析

参考博客 https://blog.csdn.net/cpp_learner/article/details/118421096 1 打开文件&#xff0c;读取全部内容 QFile file("../Json/js.json"); if (!file.open(QFile::ReadOnly | QFile::Text)) {qDebug() << "cant open error!";return; }// 读…...

[小白系列]GPU-nvidia-smi指令

‌nvidia-smi&#xff08;NVIDIA System Management Interface&#xff09;是一种命令行实用程序&#xff0c;用于监控和管理NVIDIA GPU&#xff08;图形处理器&#xff09;的状态和性能‌。它提供了一种简单而强大的方式来获取有关GPU的实时信息&#xff0c;并且可以用于诊断、…...

在SQL Server中使用hash join来提高表连接的性能

在SQL Server中使用hash join来提高表连接性能时&#xff0c;需要考虑数据集的大小、索引情况以及查询的具体需求。 在SQL Server中使用hash join来提高表连接性能的情况主要包括以下几种&#xff1a; • 两个表都没有合适的索引&#xff1a;Hash join通常适合当两个表都没有索…...

《Django 5 By Example》阅读笔记:p493-p520

《Django 5 By Example》学习第 17 天&#xff0c;p493-p520 总结&#xff0c;总计 28 页。 一、技术总结 1.internationalization(国际化) vs localization(本地化) (1)18n&#xff0c;L10n&#xff0c;g11n 以前总觉得这两个缩写好难记&#xff0c;今天仔细看了下维基百科…...

【开源】基于SpringBoot框架的网上订餐系统 (计算机毕业设计)+万字毕业论文 T018

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系统…...

数据湖治理最佳实践

如果没有最佳实践&#xff0c;存储可能会变得无法维护。自动化数据质量、生命周期和隐私功能可持续清理/移动数据湖中的数据。数据湖正成为企业从大数据中提取价值的一种日益可行的解决方案&#xff0c;对于早期采用者和新用户来说都是合理的下一步。在独立的逻辑区域中随时可用…...

基于php求职招聘系统设计

摘要 随着社会信息化时代的到来&#xff0c;如今人们社会的生活节奏普遍加快&#xff0c;人们对于工作效率的要求也越来越高&#xff0c;企业 举办招聘会耗时耗财&#xff0c;个人参加招聘会漫无目的寻找不到“方向”&#xff0c;网络搜索工作量目的性不强&#xff0c;信息量繁…...

ensp实验-vrrp多网关配置

一、交换机与路由的配置区别 1. 角色定义交换机&#xff1a; Master 或 Backup: 交换机通常作为 Master 或 Backup 设备参与 VRRP&#xff0c;负责在主设备故障时接替其工作。路由器&#xff1a; Master 或 Backup: 路由器同样可以作为 Master 或 Backup 设备…...

Ajax--实现检测用户名是否存在功能

目录 &#xff08;一&#xff09;什么是Ajax &#xff08;二&#xff09;同步交互与异步交互 &#xff08;三&#xff09;AJAX常见应用情景 &#xff08;四&#xff09;AJAX的优缺点 &#xff08;五&#xff09;使用jQuery实现AJAX 1.使用JQuery中的ajax方法实现步骤&#xf…...

【代码pycharm】动手学深度学习v2-09 Softmax 回归 + 损失函数 + 图片分类数据集

课程链接 1.读取图像分类数据集 import matplotlib.pyplot as plt import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2l d2l.use_svg_display() #读取数据集 transtransforms.ToTensor() mnist_…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

深度解析云存储:概念、架构与应用实践

在数据爆炸式增长的时代&#xff0c;传统本地存储因容量限制、管理复杂等问题&#xff0c;已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性&#xff0c;成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理&#xff0c;云存储正重塑数据存储与…...

当下AI智能硬件方案浅谈

背景&#xff1a; 现在大模型出来以后&#xff0c;打破了常规的机械式的对话&#xff0c;人机对话变得更聪明一点。 对话用到的技术主要是实时音视频&#xff0c;简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术&#xff0c;开发自己的大模型。商用方案多见为字节、百…...

【技巧】dify前端源代码修改第一弹-增加tab页

回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码&#xff0c;在知识库增加一个tab页"HELLO WORLD"&#xff0c;完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…...

Web APIS Day01

1.声明变量const优先 那为什么一开始前面就不能用const呢&#xff0c;接下来看几个例子&#xff1a; 下面这张为什么可以用const呢&#xff1f;因为复杂数据的引用地址没变&#xff0c;数组还是数组&#xff0c;只是添加了个元素&#xff0c;本质没变&#xff0c;所以可以用con…...

VUE3 ref 和 useTemplateRef

使用ref来绑定和获取 页面 <headerNav ref"headerNavRef"></headerNav><div click"showRef" ref"buttonRef">refbutton</div>使用ref方法const后面的命名需要跟页面的ref值一样 const buttonRef ref(buttonRef) cons…...

Angular中Webpack与ngx-build-plus 浅学

Webpack 在 Angular 中的概念 Webpack 是一个模块打包工具&#xff0c;用于将多个模块和资源打包成一个或多个文件。在 Angular 项目中&#xff0c;Webpack 负责将 TypeScript、HTML、CSS 等文件打包成浏览器可以理解的 JavaScript 文件。Angular CLI 默认使用 Webpack 进行项目…...