1. 程式人生 > >Websocket心跳在vue中的實現

Websocket心跳在vue中的實現

簡述

利用遞迴呼叫的方法實現,每10秒鐘發一次心跳,如果斷開send方法則會主動觸發onclose函式(onclose函式並不會在斷網的情況下立即觸發,會有幾分鐘的延遲。websocket自身並未在網路應用層實現心跳機制,拔掉網線依然會仍然會認為處於連線狀態。)

talk is cheap, show you the code.

定義到一個vue元件當中,例如heartbeat.vue,然後將元件掛載到全域性(在main.vue中倒入)

export default{
        hb : null,
        testWs(id){  // 遞迴檢測網路斷開
        let
WebSocketId = id let _self = this _self.hb = setInterval(function(){ console.log('try ididdi = ' + WebSocketId) // console.log(_self.bt_kernels) _self.bt_kernels[WebSocketId.toString()].ws.send("^_^") // console.log("我還活著,真好。@^_^@")
if(_self.bt_kernels[WebSocketId.toString()].ws.readyState == 2 || _self.bt_kernels[WebSocketId.toString()].ws.readyState == 3){ // console.log("我那麼可愛,卻死掉了@[email protected]") alert("websocket 已斷開,正在重新連線……") clearInterval(_self.hb) let
i = 1 let myVar = setInterval(function(){ console.log('catch ididdi = ' + WebSocketId) console.log(_self.bt_kernels) if(_self.bt_kernels[WebSocketId.toString()].ws.readyState == 2 || _self.bt_kernels[id.toString()].ws.readyState == 3){ _self.bt_kernels[WebSocketId.toString()].ws = new WebSocket(_self.bt_kernels[id.toString()].ws.url) // console.log("嘗試第"+i+"次重連") if(i == 10){ // console.log("救不活了,放棄重連") alert("websocket 重連失敗,請重新整理頁面") clearInterval(myVar) } i++ } if(_self.bt_kernels[WebSocketId.toString()].ws.readyState == 0){ // console.log("嘗試重連中......") }else if(_self.bt_kernels[WebSocketId.toString()].ws.readyState == 1){ // console.log("我又活過來了。Y^_^Y") clearInterval(myVar) _self.testWs(WebSocketId) } },10*1000) } }, 10*1000) }, }

函式呼叫,websockt建立成功則開啟心跳

websocket.onopen = function(){
    this.$heartbeat.testWs()
}

相關推薦

vue實現全選功能

containe lda mod html ret model methods == -m <!DOCTYPE html><html><head><meta charset="utf-8"><title>Vue 測

vue實現百度地圖拖拽地圖定位功能

.com 元素 偏移量 locals 進行 函數 nco 查看 page 效果如果所示,拖動地圖。中間圖標不動,並且自動獲取地圖當前中心點的經緯度。然後就可以用經緯度做其他的操作了。。。首先查看了百度地圖的api。能實現這個功能最貼近的就是marker。marker

Vue實現與後臺的數據交換(vue-resource)

交換 ins server img 展示 引入 oca 方式 文件夾 vue-resource是Vue.js的一款插件,它可以通過XMLHttpRequest或JSONP發起請求並處理響應。(但是目前它已經停止更新了) 1、在vue中安裝vue-resource插件 打開v

vue實現圖片全屏縮放預覽,支援移動端

# 安裝 npm install vue-photo-preview --save   # 引入 import preview from 'vue-photo-preview' import 'vue-photo-preview/dist/skin.css' Vue.use(pr

vue實現滾動載入

需要安裝該外掛: cnpm i vue-infinite-scroll -S   // 生產依賴 --save 等價 在main.js檔案進行引入進來 data中設定 busy:false <

vue實現二維碼生成

安裝 :  npm install --save qrcodejs2 js部分: <script> import QRCode from 'qrcodejs2' export default { methods: {

vue實現雙向資料繫結原理,使用了Object.defineproperty()方法,方法簡單

在vue中雙向資料繫結原理,我們一般都是用v-model來實現的 ,但一般在面試話會問到其實現的原理, 方法比較簡單,就是利用了es5中的一個方法.Object.defineproperty(),它有三個引數, Object.defineproperty(obj,'val',attrObject), 引數

vue實現滾動條緩慢向上移動的效果

.vue //用於判斷按鈕何時顯示 <div class="btn-top" v-if="scrollHeight > alarmHeight"> <el-button type="info" icon="el-icon-arrow

vue實現回到頂部功能

具體效果點選這裡檢視:   家盟家政 下面直接看程式碼:(不清楚的看對應註釋) <!-- 回頂部按鈕為一張50*50的圖片 --> <!-- btnFlag 控制圖片顯示隱藏 --> <!-- backTop 回頂部的方法 -->

vue實現上下滑動文字通告的功能

<template> <div class="marquee"> <div class="marquee_title"> <span>免費微報</span>

vuevue實現標籤頁

前言 tab標籤頁實現很多, 純css實現, js實現等, 外加一些特殊動畫。 vue中實現標籤頁實現 keep-alive標籤和is特性 vue-router中巢狀路由 is特性實現(推薦) 優點:不要依賴第三方 適用:較為簡單的頁籤導航, 如果需要儲存其他頁籤狀態, 外部使用&l

vue實現檔案的上傳讀取及下載

檔案的上傳利用input標籤的type="file"屬性,讀取用FileReader物件,下載通過建立a標籤實現 <template> <div class="filediv"> <el-button @click="downloadFile">下

vue實現點選選擇框阻止彈出層消失

在vue專案中,選擇性別是用的一個彈出層, <div class="sex" v-show="showed" transition='fade' @click="unshow"> <ul @click.

vue實現圖片丶檔案上傳

 html頁面  <input type="file" value=""  id="file"  @change='onUpload'>//注意不能帶括號 js程式碼 methods: {

vue實現簡單切換圖片效果

例項: 實現大於三張圖片時,點選箭頭圖片切換,並有箭頭置灰不可操作。 html <div class="summary"> <div class="gallery"> <div class="product-img">

vue實現簡單輪播效果

html:<div class="cate-main"> <div class="carousel-contain"> <--圖片部分--> <ul class="carousel-wrap transition"&

vue實現先請求資料再渲染dom

在專案中遇到了一個問題,下面是vue    template中的程式碼:   我之前的寫法是 這樣做的結果是下面取dom的操作,取到的dom都是undefined,也就是沒有取到。 原因是並沒有按照 請求資料—>渲染dom—>獲取dom的順序執行,實際的

vue實現移動端的scroll滾動

一、首先安裝安裝 npm install better-scroll --save 二、 並在元件中引用 import BScroll from ‘better-scroll’ template中引用指向將要滾動的DOM元素 根據官方文件ref

vue實現登入控制

vue中使用vue-router實現登入的控制在做後臺管理系統中很常見,但是不想之前熟悉的流程那樣,不過只要大家理解vue-router的使用也是很好實現的。首先我們需要編寫登入頁面和主頁面:<template> <div class="login"&g

vue實現ueditor上傳圖片遇到的幾個問題及解決方案

vue中實現ueditor上傳圖片功能 遇到的問題 初始化ue元件無法正常顯示,無法載入 單圖上傳的圖示變灰無法點選 or 多圖上傳顯示後端配置項沒有正常載入,上傳外掛不能正常使用! 配置上傳介面