魔獸爭霸官方對戰平臺怎么斷線重連?
在游戲的過程中假如意外掉線,那么重新登錄繼續進入游戲后可以由系統進行斷線重連,快速追趕游戲進度,讓你去找戰友們繼續戰斗。
簡單說一下斷線重連的原理:
斷線重連的核心其實就是兩個:1)封包回放;2)在合適的時機屏蔽用戶的操作。
對于第一點實事上很多平臺已經實現,原理比較簡單,就是把用戶的所有封包原封不動的發給他,由于war3的機制,當收到大量的封包的時候,war3會采取加速的形式追趕進度。
這里稍微提一下加速的倍率,在我內部測試的時候,如果不產生操作指令(例如一直站著不動50分鐘),加速的倍率可以到128倍以上(由于war3限制了最高8倍速,所以這個值也是需要hack修改的),而如果是實戰中,比如一局dota,即使我將內部的速度調成128倍,這個速度最高只能是十幾倍。
那么有沒有更好的方案,比如不追趕進度,像dota2那樣直接加載不是更好嗎?很可惜,當時在我研究的時候發現這個方案不可行,原因是war3并沒有保存全局狀態的邏輯,也沒有從一個狀態加載游戲的功能。
再談談第二點,這個應該是斷線重連的核心問題了。其實這個問題需要注意的很多,比如如何保證在追趕進度的時候用戶不能輸入操作,同時追趕完進度后要在合適的時機放開限制。
這里只提一下難點,因為war3的封包處理和邏輯計算是在不同的線程的,如果處理不當會導致各種詭異的bug,比如和隊友在不同的時空中(進去玩過的朋友應該有這種體會,那種在你的電腦里你已經成神,但是在隊友或者其他人那里你早已成鬼,但是你們還可以打字交流。這個bug后來發現是封包發送部分處理的時候有些bug,并沒有完整的回放所有封包導致的,并非是斷線重連這個解決方案本身的bug)。