記兩個(gè)bug

這一段時(shí)間太累了殉摔,周六還是要開(kāi)始加班了,工作日每晚回家洗洗都十一點(diǎn)了记焊,偶爾出版本都十二點(diǎn)后逸月,今天就早點(diǎn)回來(lái)了,把這周遇到的問(wèn)題總結(jié)一下遍膜。

這周主要工作是幫派功能的開(kāi)發(fā)碗硬,次要工作是解決測(cè)試提的bug。遇到兩個(gè)bug瓢颅,一個(gè)是服務(wù)器背包數(shù)據(jù)正確恩尾,下發(fā)給客戶端的指令也是正確的,但是客戶端無(wú)法識(shí)別哪個(gè)先后執(zhí)行挽懦,造成有點(diǎn)失誤翰意。

背包功能改了大概三次了,第一次我做的是增量更新信柿,客戶端請(qǐng)求冀偶。即每件物品有個(gè)修改時(shí)間和創(chuàng)建時(shí)間,要是物品的一些屬性字段更新了就修改更新時(shí)間字段渔嚷,客戶端請(qǐng)求時(shí)間和更新時(shí)間字段對(duì)比进鸠,把有變動(dòng)的下發(fā),這樣節(jié)省了流量和服務(wù)器處理時(shí)間形病,時(shí)間復(fù)雜度常數(shù)客年;第二次是服務(wù)器主動(dòng)通知【走notify消息】,leader也給了一種思路窒朋,即每個(gè)物品各自有個(gè)標(biāo)志搀罢,操作了該格子后就設(shè)置1,然后統(tǒng)一刷新侥猩,最后重置0榔至,這樣有個(gè)問(wèn)題就是如果有一個(gè)格子變動(dòng),都要遍歷所有格子欺劳,時(shí)間復(fù)雜度線性時(shí)間唧取;第三種我只把有變化的主動(dòng)通知給客戶端,時(shí)間復(fù)雜度是常數(shù)【一個(gè)操作單元只會(huì)涉及到少量幾個(gè)格子數(shù)據(jù)的變化】划提;然后消息中有增加的物品列表和刪除物品簡(jiǎn)要信息的列表指令告知客戶端枫弟,問(wèn)題出現(xiàn)在一個(gè)操作單元【一個(gè)CSReq---CSRes】中,比如背包1格子0鹏往,記為{bag = 1, slotid = 1}中有個(gè)道具淡诗,我使用后的效果是獲得一件裝備,此時(shí)我下發(fā)給客戶端的消息指令是:增加一件裝備,刪除一件道具韩容,如果這兩個(gè)操作指令涉及到的不是同一個(gè)背包切同一個(gè)格子就不會(huì)有問(wèn)題款违,反之,客戶端是不知道先增加后刪除群凶,函數(shù)先刪除后增加插爹。【先用裝備覆蓋原來(lái)道具的位置请梢,再執(zhí)行刪除那個(gè)位置赠尾,那么什么都沒(méi)有了;或者先刪除那件道具再添加裝備毅弧,后者才是正確的結(jié)果】

經(jīng)過(guò)與客戶端討論气嫁,服務(wù)器要么修改通知更新背包的協(xié)議,要么下發(fā)的指令保證不會(huì)出現(xiàn)同一個(gè)背包和格子形真,后來(lái)我在代碼中把涉及背包操作的代碼都增加了個(gè)操作時(shí)序杉编,這樣就有先后了,然后下發(fā)給客戶端時(shí)稍微處理下咆霜,就解決了背包刷新問(wèn)題【增加裝備比刪除后執(zhí)行邓馒,結(jié)果是只下發(fā)增加裝備的指令】。當(dāng)然還有其他思路蛾坯。

第二個(gè)bug真的很難重現(xiàn)光酣,B玩家對(duì)象釋放了A玩家對(duì)象的某一部分?jǐn)?shù)據(jù)。玩家對(duì)象分配在XX出脉课,某一部分?jǐn)?shù)據(jù)分配在YY處救军,XX中有引用YY的索引【這個(gè)保證了熱啟動(dòng)時(shí)可以恢復(fù)】,然后玩家P正常登陸倘零,分配XX中的A唱遭,分配YY中的B,然后下線釋放A呈驶,和B拷泽。釋放只是解除引用關(guān)系和設(shè)置標(biāo)志表示該空間不再被使用【好比函數(shù)調(diào)用分配棧空間袖瞻,ret時(shí)司致,esp回退的時(shí)候,那些先前函數(shù)棧的數(shù)據(jù)還存在但不能引用】但是那個(gè)索引值如1是臟值聋迎,然后Q玩家對(duì)象創(chuàng)建了脂矫,分配了XX中的空間A,但處于某個(gè)狀態(tài)比如等待玩家輸入名字等步驟完成后再初始化數(shù)據(jù)霉晕,此時(shí)并沒(méi)有分配YY中的空間庭再,但A中有索引值1捞奕,然后玩家P登陸,分配XX中的C佩微,分配YY中的B缝彬,索引也是1【分配總是從下一個(gè)未被使用的空間開(kāi)始,里面的實(shí)現(xiàn)是可用空間組成了一個(gè)串鏈哺眯,每個(gè)串有一個(gè)索引字段指向下一個(gè)可用空間】,P玩家數(shù)據(jù)正常扒俯,然后Q進(jìn)行到一半就斷線了就刪除該A奶卓,然后釋放分配在YY中的空間,因?yàn)樗饕秊?撼玄,正好釋放了夺姑,而不管這個(gè)1是P對(duì)象還是Q對(duì)象的,導(dǎo)致P正常下線時(shí)獲取不到某部分?jǐn)?shù)據(jù)掌猛,寫(xiě)數(shù)據(jù)庫(kù)時(shí)丟失了一部分?jǐn)?shù)據(jù)盏浙。

類似于一個(gè)指針P指向A,然后釋放A空間荔茬,指針P沒(méi)有被賦為NULL废膘,然后那個(gè)地址被另外的變量使用了,然后這里P再次操作A慕蔚,導(dǎo)致修改了別人家的數(shù)據(jù)丐黄。

解決辦法是只有在初始化玩家數(shù)據(jù)成功時(shí),才釋放YY中的數(shù)據(jù)孔飒,添加了一個(gè)標(biāo)志灌闺,在初始化時(shí)設(shè)為true,回收時(shí)設(shè)為false坏瞄,這樣就沒(méi)有問(wèn)題了桂对。


有時(shí)編碼時(shí)沒(méi)能把每一種異常考慮進(jìn)去鸠匀,導(dǎo)致出現(xiàn)了邊界異常蕉斜,這樣較難發(fā)現(xiàn)。需要對(duì)著日志慢慢分析狮崩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛛勉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子睦柴,更是在濱河造成了極大的恐慌诽凌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坦敌,死亡現(xiàn)場(chǎng)離奇詭異侣诵,居然都是意外死亡痢法,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門杜顺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)财搁,“玉大人,你說(shuō)我怎么就攤上這事躬络〖獗迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵穷当,是天一觀的道長(zhǎng)提茁。 經(jīng)常有香客問(wèn)我,道長(zhǎng)馁菜,這世上最難降的妖魔是什么茴扁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮汪疮,結(jié)果婚禮上峭火,老公的妹妹穿的比我還像新娘。我一直安慰自己智嚷,他們只是感情好卖丸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著纤勒,像睡著了一般坯苹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摇天,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天粹湃,我揣著相機(jī)與錄音,去河邊找鬼泉坐。 笑死为鳄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腕让。 我是一名探鬼主播孤钦,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纯丸!你這毒婦竟也來(lái)了偏形?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤觉鼻,失蹤者是張志新(化名)和其女友劉穎俊扭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體坠陈,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萨惑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年捐康,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庸蔼。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡解总,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姐仅,到底是詐尸還是另有隱情花枫,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布萍嬉,位于F島的核電站乌昔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏壤追。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一供屉、第九天 我趴在偏房一處隱蔽的房頂上張望行冰。 院中可真熱鬧,春花似錦伶丐、人聲如沸悼做。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肛走。三九已至,卻和暖如春录别,著一層夾襖步出監(jiān)牢的瞬間朽色,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工组题, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葫男,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓崔列,卻偏偏與公主長(zhǎng)得像梢褐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赵讯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,190評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理盈咳,服務(wù)發(fā)現(xiàn),斷路器边翼,智...
    卡卡羅2017閱讀 134,672評(píng)論 18 139
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,993評(píng)論 6 13
  • 天氣晴 星期六 持續(xù)開(kāi)了一上午的家長(zhǎng)會(huì)鱼响,真是收獲滿滿啊讯私!家庭教育方面精神上的鼓勵(lì)和收獲頗多热押,感覺(jué)到了自己在...
    陌上清歌的簡(jiǎn)書(shū)閱讀 132評(píng)論 0 2
  • 1西傀、支付寶與微信被央行處罰3萬(wàn)元 ! 2桶癣、新疆塔什庫(kù)爾干縣連續(xù)發(fā)生多次地震 致8死20余傷拥褂! 3、特朗普開(kāi)除FBi...
    早上讀報(bào)閱讀 266評(píng)論 0 1