pvp實時對戰,同步機制,針對掉線簡單分析

咱們遊戲項目,剛開始pvp實時戰鬥,就是最簡單的方式:編程

客戶端發協議,服務器轉發指令,服務器不會存任何狀態,可是假如A發了一條指令,服務器在轉發給B的時候,B剛好斷了網,未能及時捕捉,那麼這條指令就永遠丟失了,服務器

固然,B重連回來的時候能夠根據A的戰場數據來同步本身的戰場,不過這種作法對客戶端的編程要求挺高,並且客戶端要存不少狀態,隨機數和時序都容易出錯,事實上也是如此,隊列

還有一點就是容易在斷線是被外掛修改數據。遊戲

 

後面,決定服務器開房間,作個消息隊列,專門轉發指令,這樣首先能夠避免,消息量很頻繁的時候,不能及時響應,可是最終仍是能按順序逐條轉發!同步

同時這個房間還會存下客戶端發送的全部指令,這時候假如一方掉線了,這時候服務器存的整場戰鬥指令[1,2,3,4,5],可是指令5發送沒成功,重連回來的時候:消息隊列

 

1.假如是在戰場中重連回來,那麼掉線一方的客戶端會存有整場戰鬥的指令[1,2,3,4],這時候服務器給他推送[1,2,3,4,5],他僅僅只須要恢復指令5就好了。隨機數

2.假如是在主界面重連回來,即掉線一方的客戶端已經銷燬了全部的戰鬥指令,這時候服務器給他推送[1,2,3,4,5],他須要所有恢復,才能重現戰場。數據

相關文章
相關標籤/搜索