斷線重連的需求一斷線重連原理二游戲內(nèi)自動重連不刷新三刷新游戲自動重連重連數(shù)據(jù)Locationreplace重置url重連四實(shí)際項(xiàng)目中處理重連機(jī)制最后的總結(jié)斷線重連的需求
尤其是手機(jī)上,會因?yàn)榫W(wǎng)絡(luò)的不穩(wěn)定或者其他原因,導(dǎo)致用戶的socket鏈接斷開。這個時(shí)候如果直接讓玩家退出游戲,重新登錄,無疑是非常影響用戶體驗(yàn)的事情。所以根據(jù)這個需求,就有需要程序來實(shí)現(xiàn)斷線后自動重連回去的技術(shù),是用戶能夠再次快速開始游戲進(jìn)行戰(zhàn)斗。
一、斷線重連原理
原來其實(shí)很簡單,就是在斷線的時(shí)候,根據(jù)用戶的點(diǎn)擊(有些時(shí)間短的就不用點(diǎn)擊,默認(rèn)是自動重連回來),程序自動識別,是要刷新重新進(jìn)入游戲還是幫用戶自動重連。客戶端會根據(jù)自動重連標(biāo)記,幫用戶自動做事情。比如自動登陸、選角色、進(jìn)入場景、請求同步后臺數(shù)據(jù)等等。
根據(jù)實(shí)現(xiàn)機(jī)制,大致可以分兩種實(shí)現(xiàn)方法。主要是游戲內(nèi)自動重連(不刷新)和刷新游戲自動重連,后面會詳細(xì)講兩種實(shí)現(xiàn)機(jī)制,以及相關(guān)的利弊。
二、游戲內(nèi)自動重連(不刷新)
這種是比較難的,因?yàn)椴凰⑿掠螒颍敲磿驗(yàn)橐欢螘r(shí)間的斷開游戲,導(dǎo)致客戶端數(shù)據(jù)跟服務(wù)器數(shù)據(jù)不同步了。比如怪物的位置、獲得的獎勵、進(jìn)度等等。這些需要一開始就設(shè)計(jì)好,如果策劃在后期要求加這個,那幾乎是無法實(shí)現(xiàn)的,改動太大了。所以假設(shè)要這么多,大概是類似下面的做法。(如果真要詳細(xì),得一篇新的Blog了:)
1. 客戶端和服務(wù)端協(xié)定好那些數(shù)據(jù)需要客戶端自己同步
2. 斷線多久內(nèi)可以自動重連(策劃以及技術(shù)上的實(shí)現(xiàn)來互相評估)
3. 服務(wù)端提供自動重連的協(xié)議,同時(shí)用戶斷線第一時(shí)間不應(yīng)該就銷毀掉相關(guān)數(shù)據(jù)(這里比較復(fù)雜,比如自動戰(zhàn)斗是否要一直在服務(wù)器掛著,以及其他的一些關(guān)聯(lián)操作)
4. 客戶端不刷新游戲,使用新接口重新連接服務(wù)器,自動更新和同步相應(yīng)的數(shù)據(jù)(比如同步怪物位置或者其他人物位置等等)
這種技術(shù)一般用于回合制之類的游戲,一般不涉及戰(zhàn)斗系統(tǒng)。如果arpg的話,只能短暫的時(shí)間內(nèi)可以自動重連,不然的話變數(shù)太大。或者需要做一些變種,比如單純場景的怪物之類的刷新下,但是世界boss之類的場景就得重新載入之類的特殊處理。
三、刷新游戲自動重連
我個人感覺這個是簡單粗暴又實(shí)用的做法。大部分游戲都適合使用,只要一刷新,游戲的數(shù)據(jù)都沒了,全部重新開始,客戶端只需要根據(jù)標(biāo)記來做一些自動化的操作,容易很多。,同時(shí)服務(wù)器也不用更改,穩(wěn)定也不容易出錯。唯一不好的就是用戶體驗(yàn)會稍微差一些。
重連數(shù)據(jù)
字符串?dāng)?shù)據(jù):
//ip + 用戶標(biāo)識 + 服id + 服名字 (數(shù)據(jù)根據(jù)自己項(xiàng)目情況)var reload:string = ip + "#" + token + "#" + serverId + "#" +serverName;//后面的reload字符串都是這里的內(nèi)容
新聞熱點(diǎn)
疑難解答
圖片精選