websoket使用記錄

1.項目使用記錄

1.醫療項目中渲染回收柜溫濕度,需要實時更新

2.回收柜安瓿回收和余液回收時,需要前端發送指令給回收柜,比如開門、關門等。還需要收到回收柜結果,比如回收的藥品信息等。

我項目中用的是瀏覽器自帶的websoket,也可以下載插件等

2.注意提示:

到線上環境時:地址要從 ws變為wss,并且需要后端或者運維更改websoket協議才可以用,const WS_URL = 'wss://10.20.21.31:9321/ws'

3.websoket用法

1.創建 WebSocket 連接

? const ws = new WebSocket('wss://example.com/socket');

2.websoket方法

.send()

  • 發送消息到 WebSocket 服務器。
  • ws.send('Hello, server!');

.close()

  • 關閉 WebSocket 連接
  • ws.close(); // 正常關閉
  • ws.close(1000, 'Closing connection'); // 帶有狀態碼和原因

3.WebSocket 事件

onopen
  • 當 WebSocket 連接成功建立時觸發。
  • ws.onopen = function(event) { console.log('Connection established!'); };
onmessage
  • 當從服務器接收到消息時觸發。
  • socket.onmessage = function(event) {
    console.log('Message from server:', event.data);
    };
onerror
  • 當發生錯誤時觸發。
  • ws.onerror = function(event) {
    console.error('WebSocket error:', event);
    };
onclose
  • 當 WebSocket 連接關閉時觸發。
  • ws.onclose = function(event) {
    console.log('Connection closed:', event);
    };

4.?WebSocket 屬性

readyState
  • 返回 WebSocket 的當前狀態。
  • 狀態值:
    • 0?(CONNECTING):正在連接。
    • 1?(OPEN):連接已建立,可以通信。
    • 2?(CLOSING):連接正在關閉。
    • 3?(CLOSED):連接已關閉。
url
  • 返回 WebSocket 連接的 URL。
protocol
  • 返回與 WebSocket 服務器協商的子協議(如果有)。

5.?WebSocket 狀態碼 (用于?close()?方法)

WebSocket 協議定義了一些標準的關閉狀態碼,當調用 close() 方法時,可以傳遞一個狀態碼來表明關閉的原因。

  • 1000:正常關閉連接。
  • 1001:對方主機沒有響應。
  • 1002:協議錯誤。
  • 1003:接收到不支持的數據類型。
  • 1004:無效的數據。
  • 1005:無狀態碼(關閉沒有給出狀態碼)。
  • 1006:連接異常關閉。
  • 1007:收到數據不符合協議的格式。
  • 1008:政策限制,服務器關閉連接。
  • 1009:消息太大。
  • 1010:擴展不接受的協商。
  • 1011:服務器由于臨時條件無法完成請求。

6.?自定義事件監聽(推薦)

除了直接為事件設置回調函數外,你也可以使用 addEventListener() 方法來監聽 WebSocket 事件:

socket.addEventListener('open', function(event) {console.log('Connection established!');
});socket.addEventListener('message', function(event) {console.log('Message from server:', event.data);
});socket.addEventListener('error', function(event) {console.error('WebSocket error:', event);
});socket.addEventListener('close', function(event) {console.log('Connection closed:', event);
});

4.代碼:

1.文件位置:src\utils\ws.js

// ws.js
const WS_URL = 'wss://10.20.21.31:9321/ws' //線上環境用wss
//開發環境用 'ws://10.20.21.31:9321/ws'let ws = null
let reconnectTimer = null
let reconnectDelay = 3000 // 3秒重連間隔
let isManuallyClose = false
export function connectWS(options) {if (ws && ws.readyState === WebSocket.OPEN) return wsws = new WebSocket(WS_URL)ws.onopen = () => {console.log('WebSocket 已連接')if (typeof options === 'function') {// 舊寫法: connectWS(fn)// 不提供 onOpen 回調} else if (options && typeof options.onOpen === 'function') {options.onOpen()}}ws.onmessage = (event) => {if (typeof options === 'function') {options(event.data) // 舊寫法} else if (options && typeof options.onMessage === 'function') {options.onMessage(event.data) // 新寫法}}ws.onclose = () => {console.log('WebSocket 已關閉')// if (!isManuallyClose) {//   // 自動重連//   clearTimeout(reconnectTimer)//   reconnectTimer = setTimeout(() => {//     console.log('嘗試重連...')//     connectWS({ onMessage, onOpen, onError, onClose })//   }, reconnectDelay)// }// if (onClose) onClose()}ws.onerror = (err) => {console.error('WebSocket 錯誤:', err)}return ws
}export function sendWS(message) {if (ws && ws.readyState === WebSocket.OPEN) {ws.send(typeof message === 'string' ? message : JSON.stringify(message))} else {console.warn('WebSocket 未連接,無法發送消息')}
}export function closeWS() {if (ws) {ws.close()ws = null}
}

2.項目使用代碼

 mounted() {//去連接connectWS({onMessage: (data) => this.handleMessage(data)}) // 項目中首先給后端發送信息setTimeout(() => {this.sendMessage()}, 500)},
methods:{// 接收到 WebSocket 消息handleMessage(datas) {let data = JSON.parse(datas)console.log('后端返回:', data)if(data.deviceToken == this.deviceToken){this.dataBack = data}          this.pendLoading = false},
//給后端發送信息sendMessage() {// 獲取當前時間戳(毫秒)const timestamp = Date.now();// 拼接 "ABHS" 和時間戳const result = `ABHS${timestamp}`;console.log('給后端發送信息',{msgType: '5',deviceToken: this.deviceToken,// seqId: result,});return new Promise((resolve) => {sendWS({cmd: {msgType: '5',deviceToken: this.deviceToken,// seqId: result,},ip: this.ip,})})},}

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

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

相關文章

DevOps篇之通過GitLab CI 流水線實現k8s集群中helm應用發布

一. 設計思路 構建一個 GitLab CI 流水線,并且要集成到 K8s 集群中的 Helm 應用發布流程。首先,需要了解 GitLab CI 的基本結構,比如.gitlab-ci.yml 文件的配置,包括 stages、jobs、變量設置等。然后,結合之前討論的 H…

詳盡 | Deeplabv3+結構理解

https://arxiv.org/pdf/1802.02611.pdf https://link.springer.com/chapter/10.1007/978-3-319-10578-9_23 目錄 Deeplabv3 Encoder部分 Decoder部分 補充摘要 SPP 空間金字塔池化層模塊 Dilated/Atrous Conv 空洞卷積 Deeplabv3 deeplab-v3是語義分割網絡,組…

【51單片機】【protues仿真】基于51單片機音樂盒(8首歌曲)系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 1、數碼管顯示當前歌曲序號 2、按鍵切換歌曲和播放暫停? 3、內置8首音樂 二、使用步驟 基于51單片機的音樂盒是一種能夠存儲和播放多首歌曲的電子設備,通過定時器產…

@ZooKeeper 詳細介紹部署與使用詳細指南

文章目錄 **ZooKeeper 詳細介紹、部署與使用** 1. 概述 & 核心介紹 1.1 什么是 ZooKeeper? 1.2 核心特性 1.3 核心概念 1.4 典型應用場景 2. 部署 (以 3 節點集群為例) 2.1 環境準備 2.2 安裝步驟 (在所有節點執行) 2.3 啟動與停止集群 2.4 防火墻配置 (如果開啟) 3. 基本…

騰訊Hunyuan-MT-7B翻譯模型完全指南:2025年開源AI翻譯的新標桿

🎯 核心要點 (TL;DR) 突破性成就:騰訊混元MT-7B在WMT25全球翻譯競賽中獲得30/31項第一名雙模型架構:Hunyuan-MT-7B基礎翻譯模型 Hunyuan-MT-Chimera-7B集成優化模型廣泛語言支持:支持33種語言互譯,包括5種中國少數民…

Web 集群高可用全方案:Keepalived+LVS (DR) 負載均衡 + Apache 服務 + NFS 共享存儲搭建指南

文章目錄Keepalived LVS(DR) Apache NFS項目背景業務場景與核心需求傳統架構的痛點與局限技術方案的選型邏輯項目價值與預期目標項目實踐項目環境基礎配置配置 router配置免密登錄-可選配置 nfs配置 web配置 LVS-RS配置 HA 和 LVS-DS配置 ha1配置 ha2測…

Prometheus監控預警系統深度解析:架構、優劣、成本與競品

目錄 一、Prometheus是什么?核心定位與架構 二、競品分析(Prometheus vs. Zabbix vs. Nagios vs. Commercial SaaS) 三、部署成本分析 四、服務器資源消耗分析 五、給您的最終建議 一、Prometheus是什么?核心定位與架構 Prom…

Nginx反向代理及配置

Nginx反向代理 二級域名系統 顧名思義,我們有很多的這個不同的二級域名的用戶來訪問我們,比如說微博。它有一個主域名weibo.com。如果我叫一鳴,申請了一個微博,然后我就可以在微博這個主系統上申請一個二級域名來訪問我微博的主頁&#xff0…

嵌入式系統通信總線全景探秘:從板內到云端

引言 在嵌入式系統設計中,選擇合適的通信總線是決定系統性能、成本和可靠性的關鍵因素。從簡單的芯片間通信到復雜的工業網絡,不同的總線技術各司其職,形成了嵌入式世界的"交通網絡"。本文將深入探討五種經典且重要的通信技術&…

2022版Unity創建時沒有2D燈光(2D Light),沒有Global LIght2D怎么辦?

簡單來說就是你的渲染管線沒有升級到URP管線,所以才沒有這些2D燈光 如果你的創建燈光和我一樣,沒有紅線劃掉的部分,說明你和我的問題一樣,看下面的教程可以解決。 1. 確保Unity版本 確保你的Unity版本至少為2019.4或更高版本&…

技術小白如何快速的了解opentenbase?--把握四大特色

1.基本介紹 作為一名計算機專業相關背景的學生,我們或多或者接觸過一些數據庫,對于數據庫肯定是有所了解的; 你可能學習的是和微軟的sql server這樣的數據庫; 你可能接觸的更多的是企業級項目開發里面使用的這個mysql數據庫&#…

企業微信AI落地:如何選擇企業微信服務商?

現在企業用企業微信做客戶運營,最怕的不是“沒AI工具”,而是“AI用不起來”——要么功能不貼業務場景,員工嫌麻煩不用;要么回復不專業,客戶體驗差;要么數據不同步,管理者看不到效果。其實解決這…

【學Python自動化】 11 標準庫簡介 —— 第二部分

一、格式化輸出 reprlib 模塊 提供定制版 repr(),縮略顯示大型或深層嵌套對象import reprlib reprlib.repr(set(supercalifragilisticexpialidocious)) # "{a, c, d, e, f, g, ...}"pprint 模塊 美化輸出,添加換行和縮進顯示復雜數據結構impor…

【Kubernetes】知識點2

15. 什么是Pod的根容器?答:Pod 的根容器是每個 Pod 中默認存在的一個特殊容器pause容器,有時也稱為infra容器,它是Pod 啟動時創建的第一個容器,也是整個 Pod中所有容器的 “父容器”。其核心作用是為 Pod 內的所有容器…

視頻增強AI哪個效果好?實戰對比幫你找到最適合的工具

hitpaw 牛小影hitpaw 牛小影在處理低質量視頻時,我們經常會遇到畫面模糊、噪點過多、分辨率不足等問題,比如老舊視頻資料修復、監控錄像清晰化、手機拍攝視頻畫質提升等。這時候,一款好用的視頻增強AI軟件就成了剛需。下面就為大家盤點幾款效…

C#工作流示例(WorkflowCore)

using Microsoft.Extensions.DependencyInjection; using WorkflowCore.Interface; using WorkflowCore.Models;namespace LeaveRequestWorkflow {// 請假申請單public class LeaveBill{/// <summary>/// 申請人/// </summary>public string EmployeeName { get; s…

兩個子進程之間使用命名pipe

兩個子進程間可以使用命名管道&#xff0c;非常簡單。管道如果文件一樣存在硬盤中&#xff0c;使用ls可以查看&#xff0c;管道文件0字節。使用fork函數分別創建兩個子進程。 一個負責讀數據&#xff0c;一個負責寫數據。 #define _GNU_SOURCE #include <stdio.h> #inclu…

第一講、Kafka 初識與環境搭建

一、Kafka 是什么&#xff1f; Apache Kafka 是一個分布式的消息隊列&#xff08;Message Queue&#xff09;與流處理平臺。 它最早由 LinkedIn 開發&#xff0c;后來捐贈給 Apache 基金會&#xff0c;現已廣泛應用于日志收集、實時數據管道和大數據處理。 Kafka 的特點&…

Conda相關的用法

1、背景 此文主要記錄conda的一些用法&#xff0c;大部分命令來自ai搜索以及自己的理解。 2、安裝conda 2.1 選擇 conda 版本 2.1.1 Anaconda 含有 Conda 大量科學計算包&#xff08;NumPy、Pandas、Matplotlib 等&#xff09;適合數據科學、機器學習初學者下載地址&…

數據庫選擇有講究?SQLite、PostgreSQL還是MySQL?

不同規模的項目&#xff0c;數據庫選擇有講究。大家好&#xff0c;我是技術支持彼得&#xff0c;每天兩眼一睜就是為客戶解決問題。在日常使用我們的視頻平臺時&#xff0c;很多用戶會問到數據庫選擇的問題。今天就來詳細說說EasyGBS、EasyNVR和EasyCVR三大平臺該如何選擇數據庫…