精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

WebSocket:心跳檢測與重連機制,你會嗎?

開發 前端
不管是客戶端發送心跳還是服務端發送心跳,連接都有斷開的可能。例如瀏覽器最小化js被暫停、瀏覽器切換到其它tab頁面js被暫停、電腦進入睡眠等等、移動端切換網絡、信號變弱、手機黑屏、手機應用切換到后臺、路由故障、業務主動斷開等。尤其是外網環境復雜,很多路由節點會清理1分鐘內不活躍的連接,這也是為什么心跳間隔推薦小于1分鐘的原因。

為什么需要心跳檢測?

正常的情況客戶端斷開連接會向服務端發送一個fin包,服務端收到fin包后得知客戶端連接斷開,則立刻觸發onClose事件回調。

心跳包格式:WebSocket協議RFC6455中有定義控制幀的格式Ping幀包含一個操作碼0x9,Pong幀包含一個操作碼0xA。客戶端發送Ping幀,服務端收到Ping幀后回一個響應Pong幀。

但是有些極端情況如客戶端掉電、網絡關閉、拔網線、路由故障等,這些極端情況客戶端無法發送fin包給服務端,服務端便無法知道連接已經斷開。如果客戶端與服務端定時有心跳數據傳輸,則會比較及時的發現連接斷開,觸發onClose事件回調。

另外路由節點防火墻會關閉長時間不通訊的socket連接,導致socket長連接斷開。所以需要客戶端與服務端定時發送心跳數據保持連接不被斷開。

心跳原理

客戶端定時每X秒(推薦小于60秒)向服務端發送特定數據(任意數據都可),服務端設定為X秒沒有收到客戶端心跳則認為客戶端掉線,并關閉連接觸發onClose回調。這樣即通過心跳檢測請求維持了連接(避免連接因長時間不活躍而被網關防火墻關閉),也能讓服務端比較及時的知道客戶端是否異常掉線。

心跳包機制

WebSocket心跳包機制WebSocket心跳包是WebSocket協議的保活機制,用于維持長連接。有效的心跳包可以防止長時間不通訊時,WebSocket自動斷開連接。

心跳包是指在一定時間間隔內,WebSocket發送的空數據包。常見的WebSocket心跳包機制如下:

客戶端

客戶端定時向服務器發送心跳數據包,以保持長連接。

this.heartbeatTimer = setInterval(() => {
    ws.send('{"event":"ping","content":"ping heartbeat"}');
}, originData.ping_interval)
服務端

服務器定時向客戶端發送心跳數據包,以檢測客戶端連接是否正常。

$gateway = new Gateway("websocket://0.0.0.0:8783");

$gateway->pingInterval = 55;

$gateway->pingNotResponseLimit = 0;

// 服務端定時向客戶端發送的數據
$gateway->pingData = '{"type":"ping"}';

以上服務端會定時55秒給客戶端發心跳數據{"type":"ping"},而客戶端不需要定時向服務端發送心跳數據。

  • pingNotResponseLimit = 0代表服務端允許客戶端不發送心跳,服務端不會因為客戶端長時間沒發送數據而斷開連接。
  • pingNotResponseLimit = 1,則代表客戶端必須定時發送數據給服務端,否則pingNotResponseLimit*pingInterval=55秒內沒有任何數據發來則關閉對應連接,并觸發onClose。

說明

  • Gateway::$pingInterval心跳檢測時間間隔 單位:秒。如果設置為0代表不做任何心跳檢測。
  • Gateway::$pingNotResponseLimit 客戶端連續$pingNotResponseLimit次$pingInterval時間內不發送任何數據(包括但不限于心跳數據)則斷開鏈接,并觸發onClose。如果設置為0代表客戶端不用發送心跳數據,即通過TCP層面檢測連接的連通性(極端情況至少10分鐘才能檢測到連接斷開,甚至可能永遠檢測不到)
  • Gateway::$pingData 當需要服務端定時給客戶端發送心跳數據時, $gateway->pingData設置為服務端要發送的心跳請求數據,心跳數據是任意的,只要客戶端能識別即可。客戶端收到心跳數據可以忽略不做任何處理。

注意

當設置為服務端主動發送心跳時,心跳間隔并不是100%精準。當客戶端連接成功后,服務端發來的第一個心跳的時間間隔可能要小于服務器設置的值。

當設置為服務端主動發送心跳時,如果客戶端最近有發來數據,那么證明客戶端存活,服務端會省略一個心跳,下個心跳大約1.5*$gateway->pingInterval秒后發送。

如果心跳是客戶端發送,$gateway->pingNotResponseLimit最好大于0,這樣可以及時檢測到一些死連接(連接已經斷開,但是服務端不知道)

心跳機制原理

WebSocket心跳機制的原理是利用心跳包及時發送和接收數據,保證WebSocket長連接不被斷開。

WebSocket心跳機制的原理可以用下面的流程來說明:

  1. 客戶端建立WebSocket連接。
  2. 客戶端向服務器發送心跳數據包,服務器接收并返回一個表示接收到心跳數據包的響應。
  3. 當服務器沒有及時接收到客戶端發送的心跳數據包時,服務器會發送一個關閉連接的請求。
  4. 服務器定時向客戶端發送心跳數據包,客戶端接收并返回一個表示接收到心跳數據包的響應。
  5. 當客戶端沒有及時接收到服務器發送的心跳數據包時,客戶端會重新連接WebSocket

心跳機制作用

  • 保持WebSocket連接不被斷開。
  • 檢測WebSocket連接狀態,及時處理異常情況。
  • 減少WebSocket連接及服務器資源的消耗。

完整代碼

服務端心跳(不推薦)

修改配置文件config\plugin\webman\gateway-worker\process.php進程配置文件。

'pingInterval' => 30,
'pingNotResponseLimit' => 0,
'pingData' => '{"event":"ping","msg":"我是服務端主動心跳檢測"}',

控制臺檢測記錄

圖片圖片

客戶端心跳(推薦)
let $timeout = null;
let ws = new WebSocket("ws://127.0.0.1:8783");
ws.onopen = function(evt) {
    let $_content = {
        "event": "join",
        "mode": 1,
        "group_id": 0,
        "from_user_id": "10086",
        "from_username": "開源技術小棧",
        "to_user_id": "10000",
        "content": "加入會話",
    };
    ws.send(JSON.stringify($_content));
};

ws.onmessage = function(evt) {
    console.log( "【開源技術小棧】接受消息: " + evt.data);
    let _obj = JSON.parse(evt.data);
    if (_obj.data.event === 'init') {
        sendHeartbeat();
    }
};

function sendHeartbeat() {
    console.log('客戶端定時發送心跳');
    ws.send('{"event":"ping","content":"開源技術小棧我在線呢!"}');
    $timeout = setTimeout(sendHeartbeat, 3000);
}

ws.onclose = function() {
    clearTimeout($timeout);
    console.log('沒有網了,睡覺去了');
};

控制臺檢測記錄

圖片圖片

斷線重連

不管是客戶端發送心跳還是服務端發送心跳,連接都有斷開的可能。例如瀏覽器最小化js被暫停、瀏覽器切換到其它tab頁面js被暫停、電腦進入睡眠等等、移動端切換網絡、信號變弱、手機黑屏、手機應用切換到后臺、路由故障、業務主動斷開等。尤其是外網環境復雜,很多路由節點會清理1分鐘內不活躍的連接,這也是為什么心跳間隔推薦小于1分鐘的原因。

連接在外網環境很容易被斷開,所以斷線重連是長連接應用必須具備的功能(斷線重連只能客戶端做,服務端無法實現)。例如瀏覽器websocket需要監聽onclose事件,當發生onclose時建立新的連接(為避免需崩可延建立連接)。更嚴格一點,服務端也應該定時發起心跳數據,并且客戶端需要定時監測服務端的心跳數據是否超時,超過規定時間未收到服務端心跳數據應該認定連接已經斷開,需要執行close關閉連接,并重新建立新的連接。

責任編輯:武曉燕 來源: 開源技術小棧
相關推薦

2024-03-21 08:34:49

Vue3WebSocketHTTP

2024-12-23 06:00:00

TCPC#網絡

2020-09-30 14:07:05

Kafka心跳機制API

2024-09-06 11:11:20

2021-07-30 15:06:05

鴻蒙HarmonyOS應用

2021-07-20 08:23:49

HTTPWebSocketWeb

2024-05-29 07:50:41

2024-04-29 06:39:45

WebSocketSocketC#

2023-12-04 07:09:53

函數遞歸python

2021-08-19 15:36:09

數據備份存儲備份策略

2021-04-16 15:02:11

CAP理論分布式

2021-04-14 06:53:52

C# 修飾符 Public

2024-02-22 08:31:26

數據恢復工具MySQL回滾SQL

2025-08-19 17:32:16

2012-06-20 10:47:25

Team Leader

2019-05-07 15:49:27

AI人工智能藝術

2025-06-03 01:45:00

2010-07-13 10:40:30

唐駿

2024-09-02 09:31:19

2024-05-14 08:19:54

點贊
收藏

51CTO技術棧公眾號

精品亚洲a∨一区二区三区18| 特黄aaaaaaaaa真人毛片| 久久国产小视频| 欧美一区二区三区白人| 成人午夜免费在线| 欧美日韩激情视频一区二区三区| 青青草91视频| 色综合久综合久久综合久鬼88 | 卡一卡二国产精品 | 一级日韩一区在线观看| www.黄色小说.com| 亚洲欧美日本日韩| 九九精品在线播放| 欧美日韩高清丝袜| 综合视频一区| 欧美日韩中字一区| 国产精品无码人妻一区二区在线| 电影av在线| 成人动漫视频在线| 国产精品自拍偷拍视频| 日韩三级一区二区三区| 久久高清免费| 亚洲美女久久久| 国偷自产av一区二区三区麻豆| 粉嫩一区二区| 亚洲高清视频的网址| 亚洲欧洲免费无码| 日韩欧美在线番号| 国产成人精品免费视频网站| 国产精品香蕉在线观看| 久久久久成人网站| 五月天久久网站| 夜夜嗨av色一区二区不卡| 风韵丰满熟妇啪啪区老熟熟女| aaaa欧美| 色欲综合视频天天天| 国产精品久久久久7777| av黄色在线| 国产精品日产欧美久久久久| 精品在线不卡| 亚洲精品国产suv一区| 久久99精品视频| 国产成人精品电影| 日本中文字幕第一页| 最新成人av网站| 欧美日本啪啪无遮挡网站| 免费看的黄色录像| 超碰成人久久| 亚洲无亚洲人成网站77777| 中国特级黄色大片| 成人福利免费在线观看| 日韩午夜激情免费电影| 成人亚洲免费视频| 精品久久在线| 欧美日韩二区三区| 午夜视频你懂的| 粉嫩av一区二区三区四区五区 | 成人在线免费观看av| 欧美韩日亚洲| 亚洲成年人影院| 男人天堂a在线| av最新在线| 亚瑟在线精品视频| 国产h视频在线播放| av在线中出| 黑人巨大精品欧美一区免费视频 | 日韩一卡二卡三卡四卡| 免费在线观看污网站| 国产乱码精品一区二区三区亚洲人| 欧美日韩激情一区二区| 天天干天天玩天天操| 青青国产精品| 日韩三级中文字幕| 污污免费在线观看| 日韩美女精品| 国产一区二区三区高清在线观看| 亚洲欧美va天堂人熟伦| 国产精品成人av| 欧美精品亚州精品| 国产成人无码精品亚洲| 久久久久久一区二区| 国产精品女人网站| av中文字幕免费| 成人午夜免费视频| 欧美日韩亚洲在线| 免费大片在线观看www| 亚洲免费在线观看| 国产精品专区在线| 韩日一区二区| 91精品国产入口在线| 国产白袜脚足j棉袜在线观看| 青草久久视频| 日韩中文字幕精品视频| 免费在线视频观看| 性8sex亚洲区入口| 91久久精品国产91久久性色| 黄色a在线观看| 国产片一区二区| 久久香蕉视频网站| 成人欧美一区二区三区的电影| 欧美日韩国产天堂| 美女伦理水蜜桃4| 国产影视精品一区二区三区| 麻豆一区二区在线观看| 三级视频在线观看| 国内精品自线一区二区三区视频| 久草一区二区| 黄色网址在线免费播放| 欧美日韩日本国产| 日本网站在线看| 综合干狼人综合首页| 久久黄色av网站| 日本免费在线观看视频| 国内精品国产成人| 日本一区二区三区免费看| 视频在线这里都是精品| 日本福利一区二区| 亚洲激情 欧美| 午夜精品久久久久久久四虎美女版| 高清一区二区三区日本久| 伊人成人在线观看| 久久亚洲二区三区| 欧美一级欧美一级| 欧洲大片精品免费永久看nba| 亚洲欧美国产另类| 日韩成人高清视频| 国产很黄免费观看久久| 亚洲精品在线免费| 快播电影网址老女人久久| 精品久久久久久久久久久久久久久| 懂色av蜜桃av| 久久亚洲二区| 久久久久国产精品视频| 午夜av在线播放| 51精品秘密在线观看| 国产精品av久久久久久无| 国产手机视频一区二区| 官网99热精品| 在线视频国产区| 欧美区在线观看| 欧美三级视频网站| 老鸭窝毛片一区二区三区| 国产一区免费观看| av中文在线资源库| 亚洲第一精品福利| 豆国产97在线 | 亚洲| 国产高清精品网站| 黄网站色视频免费观看| 久久伊人影院| 欧美黑人一区二区三区| 国产高清第一页| 亚洲精品亚洲人成人网| 91网址在线观看精品| 欧美gayvideo| 91麻豆蜜桃| 日韩精品亚洲人成在线观看| 日韩精品一区二区三区在线播放| 欧美精品久久久久久久久46p| 国产一区高清在线| 免费看污污视频| 深夜激情久久| 久久久影视精品| 天天干天天草天天射| 天天av天天翘天天综合网 | 欧美在线观看www| 在线日本制服中文欧美| 国产精品扒开腿做| av在线第一页| 91精品国产91久久久久久一区二区 | 91视视频在线观看入口直接观看www| 老太脱裤子让老头玩xxxxx| 私拍精品福利视频在线一区| 日韩av大片在线| 在线观看免费黄色| 欧美一区二区三区不卡| 日本在线观看视频网站| 91免费国产视频网站| www.欧美日本| 99久久九九| 国产精品白丝jk白祙| 色偷偷偷在线视频播放| 一本色道久久88精品综合| 136福利视频导航| 亚洲国产综合91精品麻豆| 成人无码www在线看免费| 天堂成人国产精品一区| 中文字幕一区二区三区四区五区六区| 久久久久久爱| 97欧美精品一区二区三区| 国产三级在线观看| 91麻豆精品国产91久久久资源速度 | 精品美女在线视频| 亚洲综合国产精品| 97se综合| 欧美日韩国产91| 久久免费看视频| 日韩一区二区三区视频| 国产午夜性春猛交ⅹxxx| 国产精品国产三级国产aⅴ入口 | 一区二区三区高清在线观看| 欧美与欧洲交xxxx免费观看| 老司机午夜在线视频| 亚洲精品美女网站| 91九色蝌蚪91por成人| 午夜精品福利一区二区蜜股av| 337人体粉嫩噜噜噜| 成人激情视频网站| 三上悠亚在线一区二区| 亚洲国产免费看| 中文字幕av导航| 国产不卡av一区二区| 51精品国产人成在线观看 | 日本成人在线播放| 日韩精品视频在线观看网址| 99热这里精品| 日本精品视频一区二区三区| 免费网站观看www在线观| 国产日韩成人精品| yy1111111| 国产成人在线免费观看| 欧美女同在线观看| 久久久久国产精品一区二区| 精品久久久久久无码中文野结衣| 欧美gay男男猛男无套| 欧美一级二级三级九九九| 成人性生交大片免费看96| 成人有码在线播放| 久久精品国产福利| 国产91在线播放精品91| 国产污视频在线播放| 欧美精品xxx| 国产婷婷视频在线| 日韩中文字幕欧美| 在线观看精品一区二区三区| 亚洲免费一在线| 四虎精品成人免费网站| 欧美精品一区二区久久婷婷| 国产黄色一级大片| 在线电影一区二区三区| 亚洲无码精品国产| 欧美视频一区在线观看| 亚洲色成人www永久网站| 精品高清美女精品国产区| 国产一级片免费观看| 亚洲主播在线观看| 黄色一级免费视频| 一区二区视频免费在线观看| 午夜爱爱毛片xxxx视频免费看| 国产精品网曝门| 懂色av蜜臀av粉嫩av永久| 欧美高清在线一区二区| 日本少妇xxxxx| 国产亚洲自拍一区| 国产ts在线播放| 91免费在线视频观看| av网站有哪些| 91亚洲精品久久久蜜桃| 欧美极品jizzhd欧美仙踪林| 成人午夜伦理影院| 国产a级片视频| 成人在线视频一区二区| 香蕉视频污视频| a美女胸又www黄视频久久| 国产伦理在线观看| av一区二区三区| 亚洲最大免费视频| 91麻豆精品在线观看| b站大片免费直播| 国产日韩欧美高清在线| 超碰人人干人人| 亚洲毛片av在线| 久久久久久av无码免费网站| 亚洲一区二区三区在线看| 日韩人妻无码一区二区三区99 | 首页国产欧美日韩丝袜| 另类小说第一页| 精品一区免费av| 免费看91视频| 91老司机福利 在线| 韩国女同性做爰三级| 中文一区二区完整视频在线观看 | 天天干天天操天天爱| 欧美在线观看视频在线| 国产又粗又猛又黄| 欧美白人最猛性xxxxx69交| 网站黄在线观看| 国产一区二区免费| aaa大片在线观看| 欧美性视频在线| 久久影视精品| 91丝袜美腿美女视频网站| 久久精品国产亚洲blacked| 欧美在线3区| 婷婷综合亚洲| 成年人视频观看| 蜜桃精品视频在线| 成人性生交视频免费观看| 国产麻豆精品theporn| 国产ts丝袜人妖系列视频| 国产精品每日更新| 国产精品111| 欧美在线观看视频在线| 噜噜噜久久,亚洲精品国产品| 亚洲欧美激情四射在线日| 麻豆免费在线观看| 777国产偷窥盗摄精品视频| 成人国产精品入口免费视频| 99中文字幕| 日韩av二区| 国产自产在线视频| 麻豆精品一区二区三区| 欧亚乱熟女一区二区在线| 国产精品国产三级国产专播品爱网| 国产在线一区视频| 制服.丝袜.亚洲.中文.综合| 日韩欧美电影在线观看| 久久久精品一区二区| 九九热线视频只有这里最精品| 亚洲aⅴ男人的天堂在线观看| 亚洲亚洲免费| 福利视频一区二区三区四区| 奇米888四色在线精品| 91精品国产高清91久久久久久| 中文幕一区二区三区久久蜜桃| www.国产成人| 欧美日韩视频第一区| 免费人成在线观看网站| 欧美国产欧美亚洲国产日韩mv天天看完整| 粉嫩91精品久久久久久久99蜜桃 | 久久91麻豆精品一区| 黄色片免费在线观看视频| 国产亚洲在线| a天堂视频在线观看| 亚洲女爱视频在线| 国产免费久久久| 色偷偷av一区二区三区乱| 一二三四视频在线中文| 国产狼人综合免费视频| 日本成人小视频| 黑鬼大战白妞高潮喷白浆| 久久综合九色综合97婷婷女人| 免费在线视频观看| 欧美一级生活片| h片在线播放| 成人免费淫片视频软件| 日本午夜一区| 三上悠亚在线一区二区| 欧美激情一区在线观看| 精品人妻一区二区三区免费看| 精品国内二区三区| 亚洲制服国产| 国产精品视频在线免费观看| 亚洲精品国产首次亮相| 国产xxxxx视频| 国产精品人人做人人爽人人添| 国产午夜麻豆影院在线观看| 亚洲社区在线观看| 欧美日韩成人影院| 日韩一区二区电影在线观看| 美国欧美日韩国产在线播放| 久久久久久久久久久久| 亚洲蜜桃精久久久久久久| 国产成人三级在线播放| 在线观看欧美视频| 日韩一区中文| 日本黄xxxxxxxxx100| 国产综合久久久久影院| 成人国产精品久久久网站| 色乱码一区二区三区88| 粉嫩av在线播放| 91在线|亚洲| 国产精品二区影院| 欧美深性狂猛ⅹxxx深喉| 欧美日韩中文字幕综合视频| 外国精品视频在线观看 | 在线看国产精品| 国产成+人+综合+亚洲欧美| 在线观看成人一级片| 国产精品18久久久久久久网站| 1024手机在线观看你懂的| 欧美日韩国产欧美日美国产精品| 免费看a在线观看| 成人羞羞视频免费| 亚洲一区二区毛片| 日韩毛片无码永久免费看| 欧美日韩久久不卡| 五月婷婷视频在线观看| 免费看污久久久| 麻豆久久久久久久| 久久免费公开视频| 亚洲精品一区久久久久久| 99久久婷婷国产综合精品首页| www亚洲国产| 99精品视频一区二区三区| 国产午夜在线播放| 亚洲欧美激情视频| 久久国产精品美女| 精品中文字幕av| 国产精品电影一区二区| 亚洲av永久无码国产精品久久 |