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管理系统 效果如下: 系统主页面 用户管理页面 公告信息管理页面 客户关系管理页面 车辆信息管理页面 工资信息管理页面 文件信息管理页面 上班考勤管理页面 研究背景 随着信息化时代的到来和企业OA管理理念的更新,企业面临着日益…...
Python遥感开发之地理探测器的实现
Python遥感开发之地理探测器的实现 1 地理探测器介绍2 官方软件实现3 Python代码实现 前言:本篇博客主要介绍使用py_geodetector库来实现地理探测器。 1 地理探测器介绍 官网链接:http://www.geodetector.cn/index.html 地理探测器用于测量和归因空间分…...
【HarmonyOS】 鸿蒙保存图片或视频到相册
【HarmonyOS】 鸿蒙保存图片或视频到相册 前言 鸿蒙中保存图片或者视频,或者其他媒体文件到设备的媒体库,可以是相册,也可以是文件管理等。共有两种方式: 需要应用申请受限权限,获取文件读写的权限(调用…...
Apache Echarts和POI
目录 Apache ECharts 介绍 入门 绘制一个简单的图表 Apache POI 介绍 通过POI创建Excel文件并且写入文件内容 通过POI读取Excel文件中的内容 导出Excel表格 Apache ECharts 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观…...
厦门凯酷全科技有限公司正规吗靠谱吗?
随着短视频和直播电商的迅猛发展,越来越多的企业开始将目光投向抖音这一平台。作为国内领先的短视频社交平台,抖音凭借其庞大的用户基础和强大的算法推荐系统,成为众多品牌拓展市场、提升销售的重要渠道。厦门凯酷全科技有限公司(…...
WireShark 下载、安装和使用
1、下载 官网下载太慢,本人另外提供下载地址【下载WireShark】 2、安装 全部默认下一步即可,但如下图所示的这一步值得拿出来说一下。这一步是要你安装Npcap,但是你的电脑如果已经安装了WinPcap,那么可以选择不再安装Npcap。Npca…...
2025周易算命网站搭建详细方法+源码选择php环境的配置
以下是一个详细的搭建教程,包括网站分类、环境配置、程序设计和功能实现。 1. 环境准备 1.1 服务器选择 操作系统: Linux(推荐使用Ubuntu或CentOS)Web服务器: Nginx数据库: MySQLPHP版本: 7.4.x(确保小于8.0) 1.2 安…...
共享购模式革新登场:重构消费生态,领航商业新未来
近期,一种创新的商业模式——共享购,在电子商务领域掀起了一股热潮,不仅吸引了广大消费者的目光,也激发了商家和资本市场的浓厚兴趣。共享购模式凭借其独到的消费积分累积与转换体系,正在逐步重塑消费生态,…...
centos kafka单机离线安装kafka服务化kafka tool连接kafka
a.版本&环境 linux版本: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命令࿰…...
QT JSON文件解析
参考博客 https://blog.csdn.net/cpp_learner/article/details/118421096 1 打开文件,读取全部内容 QFile file("../Json/js.json"); if (!file.open(QFile::ReadOnly | QFile::Text)) {qDebug() << "cant open error!";return; }// 读…...
[小白系列]GPU-nvidia-smi指令
nvidia-smi(NVIDIA System Management Interface)是一种命令行实用程序,用于监控和管理NVIDIA GPU(图形处理器)的状态和性能。它提供了一种简单而强大的方式来获取有关GPU的实时信息,并且可以用于诊断、…...
在SQL Server中使用hash join来提高表连接的性能
在SQL Server中使用hash join来提高表连接性能时,需要考虑数据集的大小、索引情况以及查询的具体需求。 在SQL Server中使用hash join来提高表连接性能的情况主要包括以下几种: • 两个表都没有合适的索引:Hash join通常适合当两个表都没有索…...
《Django 5 By Example》阅读笔记:p493-p520
《Django 5 By Example》学习第 17 天,p493-p520 总结,总计 28 页。 一、技术总结 1.internationalization(国际化) vs localization(本地化) (1)18n,L10n,g11n 以前总觉得这两个缩写好难记,今天仔细看了下维基百科…...
【开源】基于SpringBoot框架的网上订餐系统 (计算机毕业设计)+万字毕业论文 T018
系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…...
数据湖治理最佳实践
如果没有最佳实践,存储可能会变得无法维护。自动化数据质量、生命周期和隐私功能可持续清理/移动数据湖中的数据。数据湖正成为企业从大数据中提取价值的一种日益可行的解决方案,对于早期采用者和新用户来说都是合理的下一步。在独立的逻辑区域中随时可用…...
基于php求职招聘系统设计
摘要 随着社会信息化时代的到来,如今人们社会的生活节奏普遍加快,人们对于工作效率的要求也越来越高,企业 举办招聘会耗时耗财,个人参加招聘会漫无目的寻找不到“方向”,网络搜索工作量目的性不强,信息量繁…...
ensp实验-vrrp多网关配置
一、交换机与路由的配置区别 1. 角色定义交换机: Master 或 Backup: 交换机通常作为 Master 或 Backup 设备参与 VRRP,负责在主设备故障时接替其工作。路由器: Master 或 Backup: 路由器同样可以作为 Master 或 Backup 设备…...
Ajax--实现检测用户名是否存在功能
目录 (一)什么是Ajax (二)同步交互与异步交互 (三)AJAX常见应用情景 (四)AJAX的优缺点 (五)使用jQuery实现AJAX 1.使用JQuery中的ajax方法实现步骤…...
【代码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_…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
