91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

小程序websocket心跳庫怎么應用

發布時間:2022-04-12 17:11:42 來源:億速云 閱讀:212 作者:zzz 欄目:編程語言

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

介紹

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

用法

安裝

npm install --save websocket-heartbeat-miniprogram

引入使用

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

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

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

支付寶小程序差異

支付寶小程序只允許同時存在一個socket連接,原生的API也和其他小程序有一點小差異,本程序已經做了兼容,但是還是要注意支付寶只允許建立一個socket,如果建立多個socket,前面的socket都會被系統關閉,一定要通過本程序實例的task.close關閉舊的socket,否則程序會一直重連,導致所有socket相互沖突無法使用。

約定

1.只能通過前端主動關閉socket連接

如果需要斷開socket,應該執行task.close()方法。如果后端想要關閉socket,應該下發一個消息,前端判斷此消息,前端再調用task.close()方法關閉。因為無論是后端調用close還是因為其他原因造成的socket關閉,前端的socket都會觸發onClose事件,程序無法判斷是什么原因導致的關閉。因此本程序會默認嘗試重連。

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

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

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

以上就是關于“小程序websocket心跳庫怎么應用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西贡区| 遵义市| 临高县| 临清市| 普兰店市| 隆林| 两当县| 福安市| 措勤县| 沂南县| 江达县| 东丰县| 温州市| 长泰县| 合川市| 罗江县| 修武县| 平乐县| 潮州市| 汨罗市| 渭南市| 西林县| 余江县| 滨海县| 太仆寺旗| 河间市| 镇巴县| 武功县| 博罗县| 阜南县| 昌江| 惠水县| 大丰市| 定结县| 华安县| 噶尔县| 登封市| 察雅县| 五家渠市| 于都县| 茂名市|