在斷網的時候,websocket 一直在CLOSING 狀態

現象

websocket 先連接成功,然后斷網。

由于維護了一套心跳機制,前端發起心跳,如果一段時間內沒有收到服務端返回的心跳。則表示連接斷開。

用心跳的方式處理斷網的兜底情況。

然而,此時網絡是斷開的,在代碼中直接調用websocket.close() 方法,會發現,websocket.readyState 會一直在 WebSocket.CLOSING 狀態,等很久也不會觸發onclose 回調。

只有網絡通的時候才會觸發 websocket onclose。

這樣會觸發不了我的重連邏輯。因為重連邏輯做在onclose 回調里面。

解決

通過定時器檢查websocket 的狀態,如果在幾秒鐘之后,還是 CLOSING 狀態,則直接調用onclose 的回調。

onclose 的回調有一個參數,可以通過 new CloseEvent 來模擬,代碼如下。

const ws = new WebSocket('ws://xxxx');ws.onclose = onclose;function onclose(e){}// 可以在檢測到closing 狀態超時了后,主動調用onclose 回調,自行模擬eventonclose(new CloseEvent('close', {wasClean: false,code: 3000,reason: 'websocket closing timeout',
}))

還要注意的是,在重新new Websocket 之前,要清除當前的websocket實例,其中的各種回調要置為null (onopen, onclose, onerror, onmessage)

因為等到重連的時候,這個CLOSING 狀態的ws實例會觸發onclose,導致onclose回調中的內容被重復執行。

參考

  • WebSocket.close() - Web API | MDN
  • CloseEvent - Web API | MDN

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

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

相關文章

基于AWS的大模型調用場景:10大成本優化實戰方案

大模型訓練與推理是AI領域的計算密集型場景,如何在AWS上實現高性能與低成本的雙重目標?本文從實例選型、彈性伸縮、存儲優化等角度,分享10個經過驗證的AWS成本優化策略,幫助企業節省30%以上成本。 一、大模型場景的成本痛點分析 計…

【網絡原理】TCP/IP協議五層模型

目錄 一. 協議的分層 二. OSI七層網絡協議 三. TCP/IP五層網絡協議 四. 網絡設備所在分層 五. 封裝 六. 分用 七. 傳輸中的封裝和分用 八. 數據單位術語 一. 協議的分層 常見的分層為兩種OSI七層模型和TCP/IP五層模型 為什么要協議分層? 在網絡通信中&…

科技快訊 | 阿里云百煉MCP服務上線;英偉達官宣:CUDA 工具鏈將全面原生支持 Python

李飛飛團隊最新AI報告:中美模型性能差距近乎持平 4月8日,斯坦福大學以人為本人工智能研究所發布《2025年人工智能指數報告》。報告顯示,2023年AI性能顯著提升,AI應用加速,投資增長,中美AI模型差距縮小。報告…

貓咪如廁檢測與分類識別系統系列【三】融合yolov11目標檢測

? 前情提要 家里養了三只貓咪,其中一只布偶貓經常出入廁所。但因為平時忙于學業,沒法時刻關注牠的行為。我知道貓咪的如廁頻率和時長與健康狀況密切相關,頻繁如廁可能是泌尿問題,停留過久也可能是便秘或不適。為了更科學地了解牠…

2025年燃氣證書:傳承與發展的行業紐帶

回溯歷史長河,能源的利用與人類文明的發展息息相關。從遠古時期的鉆木取火,到如今廣泛應用的燃氣能源,每一次能源的變革都推動著社會的巨大進步。而在現代燃氣行業蓬勃發展的背后,燃氣從業人員資格證書正扮演著傳承與發展的重要紐…

在Ubuntu下進行單片機開發是否需要關閉Secure Boot

1. Secure Boot的作用 功能:Secure Boot是UEFI的安全功能,旨在阻止未經驗證的驅動或操作系統啟動,防止惡意軟件篡改引導過程。 影響范圍:它主要限制的是操作系統啟動階段加載的內核級驅動(如顯卡驅動、虛擬化模塊&…

國達陶瓷重磅推出陶瓷羅馬柱外墻整裝尖端新產品“冠巖臻石”

近日,記者在佛山國達建材有限公司(以下簡稱國達陶瓷)董事長楊建平處了解到,該公司重磅推出的“冠巖臻石”新產品,是屬于陶瓷羅馬柱外墻整裝產品中的尖端產品。新產品自面市之后,深受高端用戶的青睞與認可。…

【分享】Ftrans文件擺渡系統:既保障傳輸安全,又提供強集成支持

【分享】Ftrans文件擺渡系統:既保障傳輸安全,又提供強集成支持! 在數字化浪潮中,企業對數據安全愈發重視,網絡隔離成為保護核心數據的關鍵防線,比如隔離成研發網-辦公網、生產網-測試網、內網-外網等。網絡…

實驗一 字符串匹配實驗

一、實驗目的 1.熟悉匯編語言編程環境和DEBUG調試程序的使用。 2.掌握鍵盤輸入字符串的方法和分支程序的設計。 二、實驗內容 編程實現:從鍵盤分別輸入兩個字符串,然后進行比較,若兩個字符串的長度…

添加登錄和注冊功能

先寫前端再寫后端 前提&#xff1a;ideavue3mybatisspringBoot3前后端分離實現對一張表的增刪改查&#xff08;完整代碼版&#xff09;-CSDN博客 項目地址 1.添加一個Login.vue視圖 <template><div class"login_container"><div class"login…

【Windows】系統安全移除移動存儲設備指南:告別「設備被占用」彈窗

Windows系統安全移除移動存儲設備指南&#xff1a;告別「設備被占用」彈窗 解決移動硬盤和U盤正在被占用無法彈出 一、問題背景 使用Windows系統時&#xff0c;經常遇到移動硬盤/U盤彈出失敗提示「設備正在使用中」&#xff0c;即使已關閉所有可見程序。本文將系統梳理已驗證…

Springboot下載文件, 文件名中文是亂碼, 空格變加號

默認把文件名放上去, 中文會亂碼, 文件名種有空格, 就會被截斷 public void download(HttpServletResponse response){// 文件名先進行url編碼, 避免亂碼問題// 把用%20進行替換fileName URLEncoder.encode(fileName, "UTF-8").replace("", "%20&qu…

MySQL 超詳細安裝教程與常見問題解決方案

一、MySQL 安裝教程 1. Windows 系統安裝&#xff08;以 MySQL 8.0 為例&#xff09; 步驟 1&#xff1a;下載 MySQL Installer 訪問 MySQL 官網下載頁面。 選擇 Windows (x86, 64-bit), MSI Installer&#xff08;推薦使用完整版 mysql-installer-web-community-8.0.xx.xx.…

【cuda學習日記】5.2.1 共享內存額外篇

共享內存(Shared Memory) 1.是一種低延遲、高帶寬的片上內存 2.由同一個Block內的所有線程共享 3.生命周期與Block相同 4.訪問速度比全局內存快約100倍 Block(線程塊) 1.GPU執行的基本單位&#xff0c;包含一組線程 2.多個Block組成Grid(網格) 3.Block內的線程可以通過共享內存…

[250411] Meta 發布 Llama 4 系列 AI 模型 | Rust 1.86 引入重大語言特性

目錄 Llama 4 家族登場&#xff1a;開啟原生多模態 AI 創新新紀元Rust 1.86.0 版本發布亮點主要新特性與改進其他重要信息 Llama 4 家族登場&#xff1a;開啟原生多模態 AI 創新新紀元 Meta AI 近日發布了其最新、最先進的 Llama 4 系列人工智能模型&#xff0c;標志著 AI 技術…

ArrayList 和 數組 的區別

定義與本質 數組&#xff1a;是 Java 語言內置的數據結構&#xff0c;是存儲相同類型元素的連續內存空間。它是一個基本的語言特性&#xff0c;在內存中是一塊連續的區域。ArrayList&#xff1a;是 Java 集合框架中的一個類&#xff0c;屬于動態數組。它是基于數組實現的&#…

??FireCrawl?爬蟲工具?, Craw4ai

?FireCrawl?是一款開源的AI爬蟲工具&#xff0c;專門用于Web數據提取&#xff0c;并將其轉換為Markdown格式或其他結構化數據。FireCrawl特別適合處理使用JavaScript動態生成的網站&#xff0c;能夠自動抓取網站及其所有可訪問的子頁面內容&#xff0c;并將其轉換為適合大語言…

通信原理-非線性調制

今天給大家帶來的是關于通信原理中非線性調制的內容,一起來看看吧&#xff01;&#xff01;&#xff01; 1.角度調制 2.FM與PM的區別 3.單音調制FM 4.窄帶調頻 5.寬帶調頻 5.1FM信號的頻譜 5.2FM信號的帶寬 5.3FM信號的功率分配 6.FM信號的產生與解調 6.1FM信號的產生 6.2FM…

文心一言開發指南03——千帆大模型平臺產品優勢

版權聲明 本文原創作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 千帆大模型平臺作為百度智能云推出的企業級大模型一站式平臺&#xff0c;具有顯著的產品優勢。千帆大模型平臺以其基礎強大、流程完善、運行穩定和安全可靠的產品優勢成為企…

mysql DQL

一.基本查詢 1.查詢多個字段 2.查看所有字段 3.設置別名 4.去除重復記錄 二.條件查詢 1.大于小于等于 2.查詢 身份證為空的 沒有所以沒有記錄 3.在15到20這個區間范圍內 4.or/in 或者 4.like 匹配 &#xff08;_匹配單個字符 %匹配多個字符&#xff09; 查詢員工信…