亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

小程序websocket心跳庫(websocket-heartbeat-miniprogram)

 更新時間:2020年02月23日 10:26:36   作者:子慕大詩人  
這篇文章主要介紹了小程序websocket心跳庫(websocket-heartbeat-miniprogram),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

在16年的時候因為項目接觸到websocket,而后對心跳重連做了一次總結(jié),寫了篇博客,而后18年對之前github上的demo代碼進(jìn)行了再次開發(fā)和開源,最終封裝成庫。如下:

github: https://github.com/zimv/websocket-heartbeat-js
npm: https://www.npmjs.com/package/websocket-heartbeat-js

在2020年也就是今年初,同事建議說可以考慮兼容一下小程序,心想也挺好的。便有了今天的 websocket-heartbeat-miniprogram,這次基于以前的代碼新建了一個項目,只做小程序的版本,因為涉及到各種小程序以及相關(guān)框架的兼容,覺得還是單獨出一個包,更專注一點。

介紹

websocket-heartbeat-miniprogram基于小程序的websocket相關(guān)API進(jìn)行封裝,主要目的是保障客戶端websocket與服務(wù)端連接狀態(tài)。該程序有心跳檢測及自動重連機(jī)制,當(dāng)網(wǎng)絡(luò)斷開或者后端服務(wù)問題造成客戶端websocket斷開,程序會自動嘗試重新連接直到再次連接成功。兼容市面上大部分小程序微信,百度,支付寶等,只要都是統(tǒng)一的小程序weboscket-API規(guī)范。也支持小程序框架比如Taro等。無論如何,業(yè)務(wù)是需要一層心跳機(jī)制的,否則一些情況下會丟失連接導(dǎo)致功能無法使用。

用法

安裝

npm install --save websocket-heartbeat-miniprogram

引入使用

import WebsocketHeartbeat from 'websocket-heartbeat-miniprogram';
WebsocketHeartbeat({
  miniprogram: wx,
  connectSocketParams: {
    url: 'ws://xxx'
  }
})
  .then(task => {
    task.onOpen = () => {//鉤子函數(shù)
      console.log('open');
    };
    task.onClose = () => {//鉤子函數(shù)
      console.log('close');
    };
    task.onError = e => {//鉤子函數(shù)
      console.log('onError:', e);
    };
    task.onMessage = data => {//鉤子函數(shù)
      console.log('onMessage', data);
    };
    task.onReconnect = () => {//鉤子函數(shù)
      console.log('reconnect...');
    };
    task.socketTask.onOpen(data => {//原生實例注冊函數(shù),重連后丟失
      console.log('socketTask open');
    });
    task.socketTask.onMessage(data => {//原生實例注冊函數(shù),重連后丟失
      console.log('socketTask data');
    });
  })

本程序內(nèi)部總是使用小程序connectSocket方法進(jìn)行socket連接,如果socket斷開,本程序內(nèi)部會再次執(zhí)行小程序的connectSocket方法,以此來重新建立連接,重連都會建立新的小程序socket實例。

WebsocketHeartbeat方法返回一個promise,返回的task對象是本程序的一個實例,提供了onOpen,onClose,onError,onMessage,onReconnect等鉤子函數(shù)。也暴露了小程序本身的實例(socketTask),task.socketTask就是小程序connectSocket返回的實例,而task.socketTask是小程序的原生實例,它們通過onXXX方法傳遞函數(shù)進(jìn)行監(jiān)聽注冊,在socket重連以后,內(nèi)部重新通過connectSocket新建實例,將會返回新的小程序原生實例,因此之前通過socketTask.onXXX注冊的這些函數(shù)將會丟失。而本程序內(nèi)部提供的鉤子函數(shù)重連上以后依然有效。大部分情況下推薦就使用本程序的鉤子函數(shù)。

支付寶小程序差異

支付寶小程序只允許同時存在一個socket連接,原生的API也和其他小程序有一點小差異,本程序已經(jīng)做了兼容,但是還是要注意支付寶只允許建立一個socket,如果建立多個socket,前面的socket都會被系統(tǒng)關(guān)閉,一定要通過本程序?qū)嵗膖ask.close關(guān)閉舊的socket,否則程序會一直重連,導(dǎo)致所有socket相互沖突無法使用。

約定

1.只能通過前端主動關(guān)閉socket連接

如果需要斷開socket,應(yīng)該執(zhí)行task.close()方法。如果后端想要關(guān)閉socket,應(yīng)該下發(fā)一個消息,前端判斷此消息,前端再調(diào)用task.close()方法關(guān)閉。因為無論是后端調(diào)用close還是因為其他原因造成的socket關(guān)閉,前端的socket都會觸發(fā)onClose事件,程序無法判斷是什么原因?qū)е碌年P(guān)閉。因此本程序會默認(rèn)嘗試重連。

import WebsocketHeartbeat from 'websocket-heartbeat-miniprogram';
WebsocketHeartbeat({
  miniprogram: wx,
  connectSocketParams: {
    url: 'ws://xxxx'
  }
})
  .then(task => {
    task.onMessage = data => {
      if(data.data == 'close') task.close();//關(guān)閉socket并且,不再重連
    };
  })

2.后端對前端心跳的反饋

前端發(fā)送心跳消息,后端收到后,需要立刻返回響應(yīng)消息,后端響應(yīng)的消息可以是任何值,因為本程序并不處理和判斷響應(yīng)的心跳消息,而只是在收到任何消息后,重置心跳,因為收到任何消息就說明連接是正常的。因此本程序收到任何后端返回的消息都會重置心跳倒計時,以此來減少不必要的請求,減少服務(wù)器壓力。

API

詳情參考: https://github.com/zimv/websocket-heartbeat-miniprogram

結(jié)語

程序已經(jīng)經(jīng)過單元測試,也在百度,支付寶,微信等小程序之中實際測試和基于Taro測試。程序長期維護(hù),發(fā)現(xiàn)兼容問題或者程序問題,希望得到issue反饋!

到此這篇關(guān)于小程序websocket心跳庫(websocket-heartbeat-miniprogram)的文章就介紹到這了,更多相關(guān)小程序websocket心跳庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Sticky組件實現(xiàn)帶sticky效果的tab導(dǎo)航和滾動導(dǎo)航的方法

    使用Sticky組件實現(xiàn)帶sticky效果的tab導(dǎo)航和滾動導(dǎo)航的方法

    sticky組件,通常應(yīng)用于導(dǎo)航條或者工具欄,當(dāng)網(wǎng)頁在某一區(qū)域滾動的時候,將導(dǎo)航條或工具欄這類元素固定在頁面頂部或底部,方便用戶快速進(jìn)行這類元素提供的操作
    2016-03-03
  • 通過修改360搶票的刷新頻率和突破8車次限制實現(xiàn)方法

    通過修改360搶票的刷新頻率和突破8車次限制實現(xiàn)方法

    這篇文章主要介紹了通過修改360搶票的刷新頻率和突破8車次限制實現(xiàn)方法的相關(guān)資料,現(xiàn)在刷票工具很多,這里就舉一例修改,增加搶票頻率及突破8車次限制,需要的朋友可以參考下
    2017-01-01
  • BootStrap實用代碼片段之一

    BootStrap實用代碼片段之一

    這篇文章主要為大家詳細(xì)介紹了BootStrap實用代碼片段之一,總結(jié)在使用BootStrap中遇到的問題,并記錄解決方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • JS實現(xiàn)隨機(jī)抽取三人

    JS實現(xiàn)隨機(jī)抽取三人

    這篇文章主要為大家詳細(xì)介紹了JS實現(xiàn)隨機(jī)抽取三人,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 利用JavaScript實現(xiàn)防抖節(jié)流函數(shù)的示例代碼

    利用JavaScript實現(xiàn)防抖節(jié)流函數(shù)的示例代碼

    在開發(fā)中我們經(jīng)常會遇到一些高頻操作,比如:鼠標(biāo)移動,滑動窗口,鍵盤輸入等等,節(jié)流和防抖就是對此類事件進(jìn)行優(yōu)化,降低觸發(fā)的頻率,以達(dá)到提高性能的目的。本文就教大家如何實現(xiàn)一個讓面試官拍大腿的防抖節(jié)流函數(shù),需要的可以參考一下
    2022-08-08
  • JavaScript計算出現(xiàn)精度丟失問題的解決方法

    JavaScript計算出現(xiàn)精度丟失問題的解決方法

    Javascript作為一門大型編程語言,在日常開發(fā)中難免會涉及到大量的數(shù)學(xué)計算,然而,浮點數(shù)在計算過程中可能出現(xiàn)精度的問題,下面我們就來學(xué)習(xí)一下Javascript中高精度計算及其相關(guān)知識吧
    2023-11-11
  • JavaScript中獲取純正的undefined的方法

    JavaScript中獲取純正的undefined的方法

    這篇文章主要介紹了JavaScript中獲取純正的undefined的方法的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • 微信小程序?qū)崿F(xiàn)給嵌套template模板傳遞數(shù)據(jù)的方式總結(jié)

    微信小程序?qū)崿F(xiàn)給嵌套template模板傳遞數(shù)據(jù)的方式總結(jié)

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)給嵌套template模板傳遞數(shù)據(jù)的方式,結(jié)合實例形式總結(jié)分析了微信小程序嵌套template模板的定義、調(diào)用、參數(shù)傳遞及相關(guān)使用技巧,需要的朋友可以參考下
    2017-12-12
  • 數(shù)組Array進(jìn)行原型prototype擴(kuò)展后帶來的for in遍歷問題

    數(shù)組Array進(jìn)行原型prototype擴(kuò)展后帶來的for in遍歷問題

    不同的程序語言都有多種循環(huán)語句,而且功能是差不多的,當(dāng)然使用場合還是有些區(qū)別的,比如for與for in,for in比較好用,它不需要預(yù)先知道對象屬性的長度。
    2010-02-02
  • JavaScript 異步時序問題

    JavaScript 異步時序問題

    這篇文章主要介紹了JavaScript 異步時序問題,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下
    2020-11-11

最新評論