小程序websocket心跳庫怎么應(yīng)用

這篇“小程序websocket心跳庫怎么應(yīng)用”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“小程序websocket心跳庫怎么應(yīng)用”文章吧。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了含山免費建站歡迎大家使用!

介紹

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

WebsocketHeartbeat方法返回一個promise,返回的task對象是本程序的一個實例,提供了onOpen,onClose,onError,onMessage,onReconnect等鉤子函數(shù)。也暴露了小程序本身的實例(socketTask),task.socketTask就是小程序connectSocket返回的實例,而task.socketTask是小程序的原生實例,它們通過onXXX方法傳遞函數(shù)進行監(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)閉。因此本程序會默認嘗試重連。

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ù)器壓力。

以上就是關(guān)于“小程序websocket心跳庫怎么應(yīng)用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

新聞標(biāo)題:小程序websocket心跳庫怎么應(yīng)用
本文網(wǎng)址:http://muchs.cn/article36/jchspg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、Google、全網(wǎng)營銷推廣網(wǎng)站排名、動態(tài)網(wǎng)站用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司