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>
【vue】vue中實現標籤頁
前言 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 多圖上傳顯示後端配置項沒有正常載入,上傳外掛不能正常使用! 配置上傳介面