網(wǎng)游避免事務(wù)與回滾
(金慶的專欄)
玩家的數(shù)據(jù)可能分散在不同進(jìn)程中,
例如背包在物品管理進(jìn)程,血量在戰(zhàn)斗進(jìn)程,公會(huì)積分在公會(huì)管理進(jìn)程。
如果一個(gè)裝備升級(jí)功能需要扣背包中物品,扣血,扣公會(huì)積分,然后增加裝備屬性,
需要跨多個(gè)進(jìn)程更改數(shù)據(jù),最終決定是否成功。
目前一般按事務(wù)處理,如果中間某個(gè)步驟失敗,需要回滾整個(gè)操作。
實(shí)際上可以放寬條件,避免事務(wù)處理,不需要回滾。
裝備升級(jí)前,客戶端將預(yù)判條件是否滿足,然后裝備升級(jí)進(jìn)程再次用本地?cái)?shù)據(jù)判斷條件,
然后依次扣物品,扣血,扣積分,所有扣除都成功后即可增加裝備屬性。
如果某個(gè)扣除失敗,將直接返回失敗結(jié)果,先前的扣除將作為損耗不再回滾。
對(duì)于玩家來(lái)說(shuō),裝備升級(jí)將是一件有風(fēng)險(xiǎn),不成功就會(huì)有損失的事,
玩家需要盡量保持當(dāng)前狀態(tài)以避免裝備升級(jí)失敗。
例如玩家需要在安全地點(diǎn)避免裝備升級(jí)時(shí)受到攻擊,
需要在公會(huì)申請(qǐng)預(yù)留積分(可能是公會(huì)頻道發(fā)個(gè)通告)。
扣除物品的次序可能需要認(rèn)真考慮,像公會(huì)積分不受控制容易變化的先扣,
扣血這種價(jià)值可以忽略的先扣,重要物品最后扣除以最大限度避免損失。
所有玩家可以承受的損失都不需要回滾。
(金慶的專欄)
玩家的數(shù)據(jù)可能分散在不同進(jìn)程中,
例如背包在物品管理進(jìn)程,血量在戰(zhàn)斗進(jìn)程,公會(huì)積分在公會(huì)管理進(jìn)程。
如果一個(gè)裝備升級(jí)功能需要扣背包中物品,扣血,扣公會(huì)積分,然后增加裝備屬性,
需要跨多個(gè)進(jìn)程更改數(shù)據(jù),最終決定是否成功。
目前一般按事務(wù)處理,如果中間某個(gè)步驟失敗,需要回滾整個(gè)操作。
實(shí)際上可以放寬條件,避免事務(wù)處理,不需要回滾。
裝備升級(jí)前,客戶端將預(yù)判條件是否滿足,然后裝備升級(jí)進(jìn)程再次用本地?cái)?shù)據(jù)判斷條件,
然后依次扣物品,扣血,扣積分,所有扣除都成功后即可增加裝備屬性。
如果某個(gè)扣除失敗,將直接返回失敗結(jié)果,先前的扣除將作為損耗不再回滾。
對(duì)于玩家來(lái)說(shuō),裝備升級(jí)將是一件有風(fēng)險(xiǎn),不成功就會(huì)有損失的事,
玩家需要盡量保持當(dāng)前狀態(tài)以避免裝備升級(jí)失敗。
例如玩家需要在安全地點(diǎn)避免裝備升級(jí)時(shí)受到攻擊,
需要在公會(huì)申請(qǐng)預(yù)留積分(可能是公會(huì)頻道發(fā)個(gè)通告)。
扣除物品的次序可能需要認(rèn)真考慮,像公會(huì)積分不受控制容易變化的先扣,
扣血這種價(jià)值可以忽略的先扣,重要物品最后扣除以最大限度避免損失。
所有玩家可以承受的損失都不需要回滾。