網絡不穩定問題的兼容處理

玩家由於網絡波動造成短線重連,需要知道的是,網絡問題,我們能做的只是兼容處理,不能完美解決。網絡問題分兩種情況:

一、客戶端向服務器發協議之前就斷網了;

二、客戶端向服務器發完協議之後斷網了;

斷網能引發一系列問題,查代碼,邏輯又是沒問題的,下面以刮刮卡爲例說明斷網造成的影響,以及相應的解決方案

邏輯是,刮卡之後,客戶端進行記錄,記錄後,該道具再次請求刮開時會被攔截,這麼處理是爲了避免客戶端在收到服務器返回協議之前,客戶端又請求了刮開,導致提示道具不存在。如果刮到道具,服務器通過協議清除掉揹包中那個道具;如果刮到現金,服務器不清楚揹包道具,但是沒有刷新揹包單個道具數據的協議,所以改成客戶端給單個道具進行現金金額賦值

一、客戶端向服務器發協議之前就斷網了

        造成的問題就是,客戶端這時候無法知道用戶是否斷網,按照有網的邏輯進行了一些處理,而實際上用戶這時候斷網了,那些就不應該做這些處理,這些處理造成的結果都是有問題的。博主這個需求是隻要走到了客戶端發協議這裏,就從list列表刪除指定刮刮卡。出現這種斷網情況後,造成的後果就是,這張卡實際沒有被掛掉,但是被客戶端從列表清除掉了。不過,只是從列表清除,揹包中還是存在這張刮刮卡的。所以影響並不大,而是用戶可以刷新重新登錄,這樣又能重置這個列表了。

二、客戶端向服務器發完協議之後斷網了

        造成的問題就是,無法收到服務器返回的協議,沒有做成功刮開之後的客戶端處理。博主這個需求,刮開之後要播特效,如果是現金紅包,還要給道具進行現金賦值。結果就是,這張卡明明已經刮開了,但是由於沒有收到服務器返回協議,導致客戶端仍然認爲這張刮刮卡沒有刮開過。自然也不會播放特效了。

----------

針對以上兩個問題,並沒有完美的解決方案。客戶端需要在道具被用掉之後做相應處理,那麼什麼時候判斷道具被用掉了呢?要麼是客戶端代碼走到了這一步就認爲道具已經被用掉了,要麼是收到服務器返回協議之後才認爲道具被用掉了。兩種方案,相對而言,服務器數據更可靠,所以最終採取的方案是收到服務器返回協議之後才視爲道具被用帶了。而博主的這個需求,要做的只是從列表清除,並沒有從揹包清除。

分析一下獲得道具獎勵的情況,1、如果在客戶端代碼執行到請求協議那一步,就從列表清除,後果是道具實際沒用掉,但是已經清掉,想再次使用,則必須打開揹包使用。對於服務器返回協議之後的處理,只有特效,想想其實這樣處理沒多大影響;2、如果在收到服務器返回協議之後,再從列表清掉,後果是道具其實已經用掉了,但是客戶端沒有從 list列表清掉,仍然能從list列表使用該道具,再次請求使用會提示道具不存在。博主最終採取了方法1。

再分析一下貨的現金大獎的情況,現金大獎不會清除道具,所以不存在道具不存在這種問題。對於服務器返回協議之後的處理,只有特效和金額賦值,特效其實影響不大,那麼還剩金額問題,金額是服務器抽的,所以必須要在收到服務器協議之後才賦值。這張開明明已經中獎了,但是沒收到數據,所以客戶端允許再次請求刮將,而服務器那邊對於已經中了現金大獎的刮刮卡,不會返回協議,最後會導致這張卡無法刮開,除非玩家刷新重登,這樣揹包會更新到服務器記錄到的數據。這個影響就比較大了,玩家是不知道要刷新重登的,最後會向客戶反饋這張卡無法刮開,客服登號發現這張卡已經刮開,如果離活動結束時間比較近,會導致玩家錯誤最後兌獎時間;解決方法有兩個:1、斷線重連後,服務器推送揹包數據和列表數據以及其它一堆不知名的協議,這樣做很可能會少發某些協議;2、對於已經中了獎的刮刮卡,再次請求刮卡時,返回服務器記錄的數據,如果需要發獎,則不發獎只發數據。最後採取了方法2.

----------

之前做需求從沒考慮過斷線重連問題,很多不知原因,無法重現的BUG很有可能都是短線重連造成的

 

        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章