断线重连
斷線重連
以下純屬理論,無實踐
1,后端定時向前端發心跳包(每次序列號加1),后端收到后回復一個,如果前端或后端在3秒內未收到心跳,則認為網絡狀況差,停止發送/接收游戲數據,繼續發心跳包進行網絡測速,直到網速達標(適用于對戰類游戲,如王者榮耀),或者提示網絡狀態不佳,斷開連接(MMORPG),
這種情況下的斷線,不進行重連,但這是斷線重連的基礎。
這種情況下,再次重連時不會有數據丟失,可以繼續上次數據發送
2,突然性網絡斷開,異常被捕獲后,前后端都立即知道了網絡斷開
斷開之前可能有一些數據已經從后端發出,還未到達前端,前端斷開連接后,數據到達不了前端,丟失了,
前后端開始斷線重連處理:前端每隔1秒向后端發送一次連接請求,直到連接上,若嘗試10次仍不能連接上,提示服務器無法連接,請檢查網絡狀況。
連接上的,服務器知道這是斷線的重連,因為斷開時服務器已經記錄下了玩家ID,
此時,服務器向前端下發一個斷線重連的回復數據,數據中有序列號,前端拿這個序列號與前端序列號對比,若后端大于前端,則知道斷線之后發生了丟包,然后把當前序列號發給后端,
后端將自己的序列號與前端發來的序列號對比,如相等,則一切正常。若不等(一定是小于,不可能大于)
則去緩存中去取緩存的協議數據,從前端的序列號開始處重新發送給前端。
這樣當玩家重連成功后,服務就會將玩家斷線期間周圍玩家的走路廣播,以及斷線前玩家的請求的回復數據(比如買了某個物品,剛點擊了物品)重新下發,像魔獸世界就是這樣的,斷線后重新成功,會看到一個急速的動畫播放,這就是后端在急速補包,前端做了加速表現。
posted on 2018-08-17 14:20 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結
- 上一篇: 快速排序,冒泡排序时间复杂度推导
- 下一篇: 随手记:IDAPro蛮强大