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.pswp.cn/web/66161.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66161.shtml
英文地址,請注明出處:http://en.pswp.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…

[Linux]Docker快速上手操作教程

前言 以下命令并不是docker的所有&#xff0c;僅涉及日常使用時最最常用的命令。 目的之一時給入門的朋友熟悉學習&#xff0c;其二時我自己偶爾使用時備忘。 一、概念 簡單介紹下docker的相關概念&#xff1a; 鏡像&#xff1a;Docker 鏡像是一個輕量級、可執行的獨立軟件…

【算法學習筆記】32:篩法求解歐拉函數

上節學習的是求一個數 n n n的歐拉函數&#xff0c;因為用的試除法&#xff0c;所以時間復雜度是 O ( n ) O(\sqrt{n}) O(n ?)&#xff0c;如果要求 m m m個數的歐拉函數&#xff0c;那么就會花 O ( m n ) O(m \sqrt{n}) O(mn ?)的時間。如果是求連續一批數的歐拉函數&#x…

生產管理看板助力節能科技公司實現數據自動化管理

在節能科技公司的生產過程中&#xff0c;數據管理的自動化是提高生產效率和產品質量的關鍵。然而&#xff0c;許多公司在數據記錄、展示、對比和存檔方面仍面臨諸多痛點&#xff0c;如產品檢測數據無法自動記錄、缺乏直觀的產線狀態展示、檢測數據對比繁瑣耗時&#xff0c;以及…

leetcode 115. 不同的子序列

題目&#xff1a;115. 不同的子序列 - 力扣&#xff08;LeetCode&#xff09; 動態規劃問題&#xff0c;f[i][j]表示s的第i個元素匹配到t的第j個元素&#xff0c;有多少種結果 f[i][j] f[i - 1][j] (s[i] t[j] ? f[i - 1][j - 1] : 0) 答案就是 f[s.length() - 1][t.len…

【C++】B2112 石頭剪子布

博客主頁&#xff1a; [小????????] 本文專欄: C 文章目錄 &#x1f4af;前言&#x1f4af;題目描述游戲規則&#xff1a;輸入格式&#xff1a;輸出格式&#xff1a;輸入輸出樣例&#xff1a;解題分析與實現 &#x1f4af;我的做法實現邏輯優點與不足 &#x1f4af…

內存快照:宕機后Redis如何實現快速恢復?

文章目錄 給哪些內存數據做快照&#xff1f;快照時數據能修改嗎?可以每秒做一次快照嗎&#xff1f;小結每課一問 更多redis相關知識 上節課&#xff0c;我們學習了 Redis 避免數據丟失的 AOF 方法。這個方法的好處&#xff0c;是每次執行只需要記錄操作命令&#xff0c;需要持…

系統架構設計師考點—項目管理

一、備考指南 項目管理主要考查的是進度管理、軟件配置管理、質量管理、風險管理等相關知識&#xff0c;近幾年都沒有考查過&#xff0c;但是有可能在案例分析中考查關鍵路徑的技術問題&#xff0c;考生了解為主。 二、重點考點 1、項目的十大管理&#xff08;速記&#xff1…

iOS - Objective-C 底層實現中的哈希表

1. 關聯對象存儲&#xff08;AssociationsHashMap&#xff09; // 關聯對象的哈希表實現 typedef DenseMap<const void *, ObjcAssociation> ObjectAssociationMap; typedef DenseMap<DisguisedPtr<objc_object>, ObjectAssociationMap> AssociationsHashMa…

兩分鐘解決 :![rejected] master -> master (fetch first) , 無法正常push到遠端庫

目錄 分析問題的原因解決 分析問題的原因 在git push的時候莫名遇到這種情況 若你在git上修改了如README.md的文件。由于本地是沒有README.md文件的&#xff0c;所以導致 遠端倉庫git和本地不同步。 將遠端、本地進行合并就可以很好的解決這個問題 注意&#xff1a;直接git pu…

Ubuntu Server 24.04 配置靜態IP

Ubuntu Server 24.04 配置靜態IP 提示&#xff1a;基于Ubuntu Server 24.04進行配置 文章目錄 Ubuntu Server 24.04 配置靜態IP一、查看網卡信息二、修改網卡信息三、使網卡配置生效四、測試 一、查看網卡信息 使用命令 ip a lo 為本地回環地址 ens33 真實網卡地址 shanfengubu…

微服務之松耦合

參考&#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…

Django 和 Vue3 前后端分離開發筆記

Django 和 Vue3 前后端分離開發筆記 1. Django Ninja API Django Ninja 是一個用于使用 Django 和 Python 3.6 類型提示構建 API 的網絡框架。它具有以下主要特點&#xff1a; 簡單易懂&#xff1a;設計為易于使用和符合直覺&#xff0c;適合快速上手。快速執行&#xff1a;…

44_Lua迭代器

在Lua中,迭代器是一種用于遍歷集合元素的重要工具。掌握迭代器的使用方法,對于提高Lua編程的效率和代碼的可讀性具有重要意義。 1.迭代器概述 1.1 迭代器介紹 迭代器是一種設計模式,它提供了一種訪問集合元素的方法,而不需要暴露其底層結構。在Lua中,迭代器通常以一個函…

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協議的認證、加…

【MySQL學習筆記】MySQL存儲過程

存儲過程 1、基礎語法2、變量2.1 系統變量2.2 用戶自定義變量2.3 局部變量 3、if 流程控制4、參數5、case 流程控制6、循環結構6.1 while 循環6.2 repeat 循環6.3 loop 循環 7、游標8、存儲函數 存儲過程是事先經過編譯并存儲在數據庫中的一段 SQL 語句的集合&#xff0c;調用存…