node.js-WebScoket心跳機制(服務器定時發送數據,檢測連接狀態,重連)

1.WebScoket心跳機制是?

? ? ? ? 基于上一篇文章,WebScoket在瀏覽器和服務器間完成一次握手,兩者間創建持久性連接,并進行雙向數據連接。node.js-node.js作為服務器,前端使用WebSocket(單個TCP連接上進行全雙工通訊的協議)-CSDN博客文章瀏覽閱讀645次,點贊17次,收藏11次。node.js作為服務器,前端使用WebSocket(單個TCP連接上進行全雙工通訊的協議) https://blog.csdn.net/2301_76671906/article/details/146199752?fromshare=blogdetail&sharetype=blogdetail&sharerId=146199752&sharerefer=PC&sharesource=2301_76671906&sharefrom=from_link????????心跳機制簡單的來說,就是(1)客戶端向服務器利用定時(setInterval)發送消息(心跳包)。(2)前端監聽WebScoket的關閉連接(onclose()事件)時重新創建連接。

  • ? ? ? ? 客戶端定時向服務器發送心跳數據包,保持持久性連接。
  • ? ? ? ? 服務器定時向客戶端發送心跳數據包,檢測客戶端連接是否正常。

2.WebScoket心跳機制的必要性?

? ? ? ? 必要的,心跳機制通過檢測服務器與客戶端連接狀態,處理連接失敗后重連或其他的異常情況。

3.WebScoket心跳機制的缺點?

  • ????????不斷地定時發送心跳數據包,會消耗服務器的資源。
  • ????????檢測到連接失敗后,重新連接會導致部分的數據丟失。

4.例子

<!DOCTYPE html>
<html>
<head><title>WebSocket測試</title><script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
</head>
<body><div id="app"><input v-model="inputMessage" @input="sendMessage" placeholder="輸入消息"><p>收到的消息: {{ receivedMessage }}</p></div><script>// 創建WebSocket實例,連接到本地的8080端口const ws = new WebSocket('ws://localhost:8080');const app = new Vue({el: '#app',data: {inputMessage: '',receivedMessage: ''},methods: {sendMessage() {// 如果WebSocket連接已打開if (ws.readyState === WebSocket.OPEN) {// 發送輸入框中的內容ws.send(this.inputMessage);}}}});// 當WebSocket連接成功時觸發ws.onopen = function() {console.log('已連接到服務器');// 1.連接成功后開始心跳startHeartbeat();};// 2.當收到服務器發送的消息時觸發ws.onmessage = function(event) {console.log('收到消息: ' + event.data);// 更新Vue實例中的receivedMessage變量app.receivedMessage = event.data;//重置心跳計時器resetHeartbeat();};// 3.當WebSocket連接關閉時觸發ws.onclose = function() {console.log('連接已關閉');// 停止心跳計時器stopHeartbeat();// 添加重新連接邏輯};// 4.心跳相關發送心跳消息和重置心跳計時器let heartbeatIntervalId;const heartbeatInterval = 30000; // 心跳間隔,單位為毫秒function startHeartbeat() {heartbeatIntervalId = setInterval(() => {if (ws.readyState === WebSocket.OPEN) {ws.send('heartbeat'); // 發送心跳消息console.log('發送心跳消息');} else {stopHeartbeat(); // 如果連接關閉,停止心跳}}, heartbeatInterval);}// 心跳重置定時器function resetHeartbeat() {clearInterval(heartbeatIntervalId); // 清除心跳計時器startHeartbeat(); // 重新開始心跳計時器}// 停止心跳計時器 function stopHeartbeat() {clearInterval(heartbeatIntervalId); }</script>
</body>
</html>

node.js作為服務器進行對應的接受相關的代碼在上一篇文章。

主要實現思路:

  • ????????WebScoket連接成功時開啟心跳
  • ????????當服務器發送消息時,重置心跳,開啟心跳
  • ????????監聽連接關閉時,停止心跳
  • ????????重連服務器未涉及,待學習

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

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

相關文章

若依RuoYi-Cloud-Plus微服務版(完整版)前后端部署

一.目標 在瀏覽器上成功登錄進入 二.源碼下載 后端源碼&#xff1a;前往Gitee下載頁面(https://gitee.com/dromara/RuoYi-Cloud-Plus)下載解壓到工作目錄。 前端源碼&#xff1a; 前往Gitee下載頁面(https://gitee.com/JavaLionLi/plus-ui)下載解壓到工作目錄。 文檔地址&a…

Nginx 多協議代理功能(Nginx Multi Protocol Proxy Function)

前言 Nginx 作為高性能的反向代理和負載均衡工具&#xff0c;廣泛應用于 HTTP 和 HTTPS 協議的代理。但你知道嗎&#xff1f;Nginx 還可以代理其他協議&#xff0c;比如 TCP 和 UDP&#xff01;這些功能讓它在多協議支持方面表現出色&#xff0c;可以用于數據庫代理、流媒體服…

MistralAI挑戰DeepSeek:開源模型能否顛覆行業巨頭

在2025年&#xff0c;世界移動通信大會的展臺上&#xff0c;MistralAI的創始人ArthurMensch對著鏡頭&#xff0c;露出了溫和的笑容。不過他隨后講出的話&#xff0c;就仿佛一顆重磅炸彈&#xff0c;在AI領域引發了巨大的動蕩——他們即將推出的開源模型&#xff0c;據傳能夠超越…

代碼隨想錄第五十二天| 101.孤島的總面積 102.沉沒孤島 103.水流問題 104.建造最大島嶼

孤島的總面積 題目描述 給定一個由 1&#xff08;陸地&#xff09;和 0&#xff08;水&#xff09;組成的矩陣&#xff0c;島嶼指的是由水平或垂直方向上相鄰的陸地單元格組成的區域&#xff0c;且完全被水域單元格包圍。孤島是那些位于矩陣內部、所有單元格都不接觸邊緣的島…

八叉樹地圖的原理與實現

八叉樹與體素圖 八叉樹地圖 八叉樹地圖是可變分辨率的三維柵格地圖&#xff0c;可以自由調整分辨率&#xff0c;如下所示&#xff1a; 根據點云的數量或密度決定每個葉子方塊是否被占據 體素圖 體素就是固定分辨率的三維柵格地圖&#xff0c;如下所示&#xff1a; 根據點云…

最節省服務器,手搓電子證書查詢系統

用戶預算150元&#xff0c;想要一個最簡單證書查詢系統。前臺能查詢證書、后臺管理員能登錄能修改密碼&#xff0c;證書能夠手動輸入修改刪除、批量導入導出刪除數據、查詢搜索。能夠兼容蘋果、安卓、PC三端瀏覽器&#xff0c;最后幫忙部署到云服務器上。 用戶預算不多&#xf…

什么是全棧?

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點下班 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 &#x1f4c3;文章前言 &#x1f537;文章均為學習工…

作物移栽機器人的結構設計的介紹

作物移栽機器人的結構設計是一個復雜的機械與電子結合的系統工程&#xff0c;單純用代碼來實現整個結構設計是不現實的&#xff0c;因為結構設計更多涉及到機械結構、硬件選型等物理層面的內容。不過&#xff0c;我們可以通過代碼來模擬作物移栽機器人的部分功能&#xff0c;例…

【文獻閱讀】SPRec:用自我博弈打破大語言模型推薦的“同質化”困境

&#x1f4dc;研究背景 在如今的信息洪流中&#xff0c;推薦系統已經成為了我們生活中的“貼心小助手”&#xff0c;無論是看電影、聽音樂還是購物&#xff0c;推薦系統都在努力為我們提供個性化的內容。但這些看似貼心的推薦背后&#xff0c;其實隱藏著一個嚴重的問題——同質…

使用1Panel一鍵搭建WordPress網站的詳細教程(全)

嘿&#xff0c;各位想搭建自己網站的朋友們&#xff01;今天我要跟大家分享我用1Panel搭建WordPress網站的全過程。說實話&#xff0c;我之前對服務器運維一竅不通&#xff0c;但通過這次嘗試&#xff0c;我發現原來建站可以這么簡單&#xff01;下面是我的親身經歷和一些小技巧…

本地fake server,

C# 制作的系統級tcp 重定向&#xff0c;整個系統只要有訪問指定url&#xff0c;返回自定義內容到訪問端。不局限在瀏覽器單一方面。 再者請理解這個圖的含金量&#xff0c;服務器down機都可以模擬。 用途那就太多了&#xff0c;當然很多用途都不正當。嘿嘿 如果你很想要源代…

設計模式之美

UML建模 統一建模語言&#xff08;UML&#xff09;是用來設計軟件的可視化建模語言。它的語言特點是簡單 統一 圖形化 能表達軟件設計中的動態與靜態信息。 UML的分類 動態結構圖&#xff1a; 類圖 對象圖 組件圖 部署圖 動態行為圖&#xff1a; 狀態圖 活動圖 時序圖 協作…

【openGauss】物理備份恢復

文章目錄 1. gs_backup&#xff08;1&#xff09;備份&#xff08;2&#xff09;恢復&#xff08;3&#xff09;手動恢復的辦法 2. gs_basebackup&#xff08;1&#xff09;備份&#xff08;2&#xff09;恢復① 偽造數據目錄丟失② 恢復 3. gs_probackup&#xff08;1&#xf…

一文了解JVM的垃圾回收

Java堆內存結構 java堆內存是垃圾回收器管理的主要區域&#xff0c;也被稱為GC堆。 為了方便垃圾回收&#xff0c;堆內存被分為新生代、老年代和永久代。 新創建的對象的內存會在新生代中分配&#xff0c;達到一定存活時長后會移入老年代&#xff0c;而永久代存儲的是類的元數…

SQL子查詢與MyBatis映射

文章目錄 前言1. 數據庫表結構2. MyBatis Mapper XML3. Java 實體類4. 技術點解析5. 執行效果6. 優化建議 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 以下是一個結合 SQL 別名、子查詢、MyBatis 字段映射和代碼復用的完整案例&#xff0c;以用戶管…

基于SpringBoot的“校園周邊美食探索及分享平臺”的設計與實現(源碼+數據庫+文檔+PPT)

基于SpringBoot的“校園周邊美食探索及分享平臺”的設計與實現&#xff08;源碼數據庫文檔PPT) 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 校園周邊美食探索及分享平臺結構圖…

時間復雜度(Time Complexity)

時間復雜度 1. 什么是時間復雜度&#xff1f; 時間復雜度&#xff08;Time Complexity&#xff09;是計算算法執行時間隨輸入規模&#xff08;n&#xff09;增長的變化趨勢。它衡量算法的效率&#xff0c;通常使用大 O 記號&#xff08;Big-O notation&#xff09;表示&#…

樹莓派:更新源

發行版本 Debian 一直維護著至少三個發行版本&#xff1a;“穩定版&#xff08;stable&#xff09;”&#xff0c;“測試版&#xff08;testing&#xff09;”和“不穩定版&#xff08;unstable&#xff09;”。 發行版目錄 下一代 Debian 正式發行版的代號為 bullseye — 發布…

K8s 1.27.1 實戰系列(八)Service

一、Service介紹 1、Service 的作用與核心功能 Service 是 Kubernetes 中用于抽象一組 Pod 并提供穩定訪問入口的資源。它解決了以下問題: ?Pod IP 不固定:Pod 可能因故障、擴縮容或更新導致 IP 變化,Service 通過 ClusterIP(虛擬 IP)提供固定訪問地址。?負載均衡:自動…

RocketMQ性能優化篇

在分布式消息系統中&#xff0c;RocketMQ以其高性能、高可靠性和高可擴展性而被廣泛應用。然而&#xff0c;為了充分發揮其性能優勢&#xff0c;需要進行一系列的性能測試和優化。本文將從性能測試方法和優化實踐兩個方面&#xff0c;詳細介紹如何對RocketMQ進行性能優化。通過…