天天看點

websocket-heartbeat-js心跳檢測庫正式釋出

兩年前寫了一篇websocket心跳的部落格——初探和實作websocket心跳重連。  閱讀量一直比較大,加上最近考慮寫一個自己的npm包,是以就完成了一個websocket心跳的檢測庫。在這裡先感謝幾個提供幫助的大佬朋友們,小弟受益匪淺。

websocket-heartbeat-js基于浏覽器js原生websocket封裝,主要目的是保障用戶端websocket與服務端連接配接狀态。該程式有心跳檢測及自動重連機制,當網絡斷開或者後端服務問題造成用戶端websocket斷開,程式會自動嘗試重新連接配接直到再次連接配接成功。

在使用原生websocket的時候,如果裝置網絡斷開,不會觸發任何函數,前端程式無法得知目前連接配接已經斷開。這個時候如果調用websocket.send方法,浏覽器就會發現消息發不出去,便會立刻或者一定短時間後(不同浏覽器或者浏覽器版本可能表現不同)觸發onclose函數。

後端websocket服務也可能出現異常,連接配接斷開後前端也并沒有收到通知,是以需要前端定時發送心跳消息ping,後端收到ping類型的消息,立馬傳回pong消息,告知前端連接配接正常。如果一定時間沒收到pong消息,就說明連接配接不正常,前端便會執行重連。

為了解決以上兩個問題,以前端作為主動方,定時發送ping消息,用于檢測網絡和前後端連接配接問題。一旦發現異常,前端持續執行重連邏輯,直到重連成功。

1.關閉websocket連接配接

如果需要斷開websocket,應該執行WebsocketHeartbeatJs.close(),WebsocketHeartbeatJs.ws是原生Websocket執行個體對象,WebsocketHeartbeatJs.ws.onclose,已經被綁定了重連方法,如果後端websocket服務直接關閉連接配接,前端WebsocketHeartbeatJs.ws.onclose會被執行,WebsocketHeartbeatJs會嘗試重連。如果後端想告訴前端需要斷開連接配接,需要發送特定消息給前端,前端收到特定消息,調用WebsocketHeartbeatJs.close(),WebsocketHeartbeatJs将不會重連。

2.ping & pong

前端發送ping消息,後端收到後,需要立刻傳回pong消息,pong消息可以是任何值,websocket-heartbeat-js并不處理pong消息,而隻是在收到任何消息後,重置心跳,因為收到任何消息就說明連接配接是正常的。

websocket-heartbeat-js僅僅是封裝了心跳相關的鈎子函數,websocketHeartbeatJs.ws是原生Websocket執行個體,如需要使用更多websocket特性,請直接操作websocketHeartbeatJs.ws。

屬性

必填

類型

預設值

描述

url

true

string

none

websocket服務端接口位址

pingTimeout

false

number

15000

每隔15秒發送一次心跳,如果收到任何後端消息定時器将會重置

pongTimeout

10000

ping消息發送之後,10秒内沒收到後端消息便會認為連接配接斷開

reconnectTimeout

2000

嘗試重連的間隔時間

pingMsg

"heartbeat"

ping消息值

發送消息給後端

前端手動斷開websocket連接配接,此方法不會觸發重連。 websocketHeartbeatJs.close()

demo show

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

github:https://github.com/zimv/websocket-heartbeat-js

websocket-heartbeat-js心跳檢測庫正式釋出

有沒有人打賞?沒有的話,那我晚點再來問問。

websocket-heartbeat-js心跳檢測庫正式釋出

關注大詩人公衆号,第一時間擷取最新文章。

websocket-heartbeat-js心跳檢測庫正式釋出

如果你有購買鋼琴的打算,可以從這裡了解到在售資訊,價格實惠品質保障。

---轉發請标明,并添加原文連結---

繼續閱讀