天天看點

斷線重連

斷線重連

以下純屬理論,無實踐

1,後端定時向前端發心跳包(每次序列号加1),後端收到後回複一個,如果前端或後端在3秒内未收到心跳,則認為網絡狀況差,停止發送/接收遊戲資料,繼續發心跳包進行網絡測速,直到網速達标(适用于對戰類遊戲,如王者榮耀),或者提示網絡狀态不佳,斷開連接配接(MMORPG),

這種情況下的斷線,不進行重連,但這是斷線重連的基礎。

這種情況下,再次重連時不會有資料丢失,可以繼續上次資料發送

2,突然性網絡斷開,異常被捕獲後,前後端都立即知道了網絡斷開

斷開之前可能有一些資料已經從後端發出,還未到達前端,前端斷開連接配接後,資料到達不了前端,丢失了,

前後端開始斷線重連處理:前端每隔1秒向後端發送一次連接配接請求,直到連接配接上,若嘗試10次仍不能連接配接上,提示伺服器無法連接配接,請檢查網絡狀況。

連接配接上的,伺服器知道這是斷線的重連,因為斷開時伺服器已經記錄下了玩家ID,

此時,伺服器向前端下發一個斷線重連的回複資料,資料中有序列号,前端拿這個序列号與前端序列号對比,若後端大于前端,則知道斷線之後發生了丢包,然後把目前序列号發給後端,

後端将自己的序列号與前端發來的序列号對比,如相等,則一切正常。若不等(一定是小于,不可能大于)

則去緩存中去取緩存的協定資料,從前端的序列号開始處重新發送給前端。

這樣當玩家重連成功後,服務就會将玩家斷線期間周圍玩家的走路廣播,以及斷線前玩家的請求的回複資料(比如買了某個物品,剛點選了物品)重新下發,像魔獸世界就是這樣的,斷線後重新成功,會看到一個急速的動畫播放,這就是後端在急速補包,前端做了加速表現。

posted on 2018-08-17 14:20 時空觀察者9号 閱讀(...) 評論(...) 編輯 收藏