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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62724.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62724.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62724.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ariba Procurement: Administration_Cloud Basics

# SAP Ariba Procurement: Administration_Cloud Basics 認識Ariba Cloud SAP Ariba Procurement 是一個云計算平臺… The Ariba Cloud 平臺需要簡單理解的概念: Datacenter數據中心:SAP Ariba在世界各地有許多數據中心。這些數據中心構成了Ariba云的基本物理基礎設施。 …

vulnhub靶場【shenron】--1

前言 靶機&#xff1a;shenron-1 攻擊&#xff1a;kali 都采用虛擬機&#xff0c;網卡為橋接模式 主機發現 使用arp-scan -l或netdiscover -r 192.168.1.1/24掃描 信息收集 使用nmap掃描端口 網站信息探測 查看頁面&#xff0c;發現是apache2的默認界面&#xff0c;查看…

等保2.0數據庫測評之SQL server數據庫測評

一、SQL server數據庫介紹 SQL server美國Microsoft公司推出的一種關系型數據庫系統。SQL Server是一個可擴展的、高性能的、為分布式客戶機/服務器計算所設計的數據庫管理系統。 本次安裝環境為Windows10專業版操作系統&#xff0c;數據庫版本為Microsoft SQL Server 2019 (…

無人機之報警器的工作原理!

一、電量監測技術 電量監測是無人機電量指示和報警功能的基礎。通過實時監測無人機的電池電量&#xff0c;系統能夠準確判斷電池的剩余使用時間&#xff0c;并在電量不足時發出報警。電量監測技術通常包括以下幾個方面&#xff1a; 電壓檢測&#xff1a;無人機電池內部通常配…

【pyspark學習從入門到精通23】機器學習庫_6

目錄 分割連續變量 標準化連續變量 分類 分割連續變量 我們經常處理高度非線性的連續特征&#xff0c;而且只用一個系數很難擬合到我們的模型中。 在這種情況下&#xff0c;可能很難只通過一個系數來解釋這樣一個特征與目標之間的關系。有時&#xff0c;將值劃分到離散的桶中…

解密時序數據庫的未來:TDengine Open Day技術沙龍精彩回顧

在數字化時代&#xff0c;開源已成為推動技術創新和知識共享的核心力量&#xff0c;尤其在數據領域&#xff0c;開源技術的涌現不僅促進了行業的快速發展&#xff0c;也讓更多的開發者和技術愛好者得以參與其中。隨著物聯網、工業互聯網等技術的廣泛應用&#xff0c;時序數據庫…

QT 使用共享內存 實現進程間通訊

QSharedMemory&#xff1a;如果兩個進程運行在同一臺機器上&#xff0c;且對性能要求非常高&#xff08;如實時數據共享、圖像渲染等&#xff09;&#xff0c;建議使用共享內存。 優點&#xff1a; 高性能&#xff1a; 共享內存是進程間通信的最快方式之一&#xff0c;因為數…

在Scala中對隱式轉換格式與作用

隱式對象 格式&#xff1a;implicit object 作用&#xff1a;給函數的默認參數提供隱式值 object Scala12______10 { // case class DataBase(driver: String, url: String) // // implicit object mySql extends DataBase("mysql", "localhost:300") //…

go build command

文章目錄 1.簡介2.格式3.選項4.示例5.小結參考文獻 1.簡介 go build 是 Go 語言工具鏈中的一個命令&#xff0c;它用于編譯 Go 源代碼并生成可執行文件。 2.格式 go build [-o output] [build flags] [packages]可選的 -o 選項強制 build 將生成的可執行文件或對象寫入指定的…

OpenCV實驗:圖片加水印

第二篇&#xff1a;圖片添加水印&#xff08;加 logo&#xff09; 1. 實驗原理 水印原理&#xff1a; 圖片添加水印是圖像疊加的一種應用&#xff0c;分為透明水印和不透明水印。水印的實現通常依賴于像素值操作&#xff0c;將水印圖片融合到目標圖片中&#xff0c;常用的方法…

WinDbg 中使用 !process 命令

PROCESS 81a979d0 SessionId: 0 Cid: 0210 Peb: 7ffda000 ParentCid: 063cDirBase: 145b9000 ObjectTable: e12fed70 HandleCount: 53.Image: Dbgview.exe 1. PROCESS 81a979d0 意義&#xff1a;PROCESS 是該進程對象的內核地址。用途&#xff1a;可以使用這個地址獲…

深入解析下oracle的number底層存儲格式

oracle數據庫中&#xff0c;number數據類型用來存儲數值數據&#xff0c;它既可以存儲負數數值&#xff0c;也可以存儲正數數值。相對于其他類型數據&#xff0c;number格式的數據底層存儲格式要復雜得多。今天我們就詳細探究下oracle的number底層存儲格式。 一、環境搭建 1.…

SparkSQL與Hive的整合

文章目錄 SparkSQL與Hive的整合1.1. Spark On Hive1.1.1. Hive的準備工作1.1.2. Spark的準備工作1.1.3. Spark代碼開發1.1.4. Spark On Hive案例 1.2. Hive On Spark1.3. SparkSQL命令行1.4. SparkSQL分布式查詢引擎1.4.1. 開啟ThriftServer服務1.4.2. beeline連接ThriftServer…

(持續更新)linux網絡編程中需要注意的內核參數與網絡機制

目錄 零、基本說明 一、內核參數 二、相關機制 1、GRO &#xff08;1&#xff09;適用場景 &#xff08;2&#xff09;優缺點 &#xff08;3&#xff09;相關操作 2、Nagle 算法 &#xff08;1&#xff09;基本規則 &#xff08;2&#xff09;優缺點 &#xff08;3&…

DevExpress WPF中文教程:Grid - 如何移動和調整列大小?(一)

DevExpress WPF擁有120個控件和庫&#xff0c;將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序&#xff0c;這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件…

Matlab筆記---clear、clc、clear all應用

在MATLAB中&#xff0c;clear、clc 和 clear all 是三個常用的命令&#xff0c;它們各自有不同的作用&#xff1a; clc&#xff1a; clc 命令用于清除MATLAB命令窗口中的所有輸出。它不會刪除任何變量、函數或文件&#xff0c;只是清除屏幕上的顯示內容&#xff0c;讓你可以更…

銘記一次項目重大事故

在程序的世界里&#xff0c;bug 就像隱藏在暗處的小怪獸&#xff0c;時不時跳出來搗亂。而職業生涯中&#xff0c;總有那么一個或幾個 bug 讓我們刻骨銘心。它或許讓項目差點夭折&#xff0c;或許讓你熬了無數個通宵&#xff0c;或許有著離奇的出現方式和曲折的解決過程。無論是…

Qt 一個簡單的QChart 繪圖

Qt 一個簡單的QChart 繪圖 先上程序運行結果圖&#xff1a; “sample9_1QChart.h” 文件代碼如下&#xff1a; #pragma once#include <QtWidgets/QMainWindow> #include "ui_sample9_1QChart.h"#include <QtCharts> //必須這么設置 QT_CHARTS_USE_NAME…

分布式事物XA、BASE、TCC、SAGA、AT

分布式事務——Seata 一、Seata的架構&#xff1a; 1、什么是Seata&#xff1a; 它是一款分布式事務解決方案。官網查看&#xff1a;Seata 2.執行過程 在分布式事務中&#xff0c;會有一個入口方法去調用各個微服務&#xff0c;每一個微服務都有一個分支事務&#xff0c;因…

MySQL為什么使用B+樹來作索引

我來詳細解釋一下B樹的結構和特點。 graph TDA[根節點 40|70] --> B[20|30]A --> C[50|60]A --> D[80|90]B --> E[10|15]B --> F[25|28]B --> G[35|38]C --> H[45|48]C --> I[55|58]C --> J[65|68]D --> K[75|78]D --> L[85|88]D --> M[9…