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