話說各位大神 你們遇到過因為網絡抖動導致客戶端的卡頓現象嗎,或者說測試反饋模擬弱網環境的時候某個功能點會卡頓一下,然后通過各種定位,發現原來是一次性下發了好多包????
問題來了如果我們在一個Tick中直接一幀去處理這些包的話????????結果會怎么樣呢?假如一幀的時候就是8ms,
這些包處理完成需要50ms,不就是表現出來卡頓了嗎?????????
ok,下面先貼下官方卡頓本質原因:
網絡抖動(Jitter)是指在網絡傳輸過程中,數據包的傳輸時間在短時間內頻繁變化,這種變化可能是由于網絡擁塞、路由器處理延遲、物理鏈路不穩定等多種因素引起的。當網絡抖動發生時,游戲客戶端可能會遇到以下問題:
- 數據包丟失:由于抖動可能導致數據包在網絡中傳輸的時間過長,超過了預期的接收時間,網絡設備可能會丟棄這些超時的數據包,這會導致游戲客戶端無法接收到完整的信息,影響游戲體驗。
- 數據包重復:在網絡抖動的情況下,某些數據包可能被多次發送,因為它們沒有正確地被確認接收。這不僅增加了網絡負載,還可能導致客戶端接收到錯誤的信息,如角色動作重復或位置混亂。
- 延遲加劇:抖動會使數據包的到達時間變得不可預測,導致游戲中的響應時間變長,出現卡頓、延遲等問題,影響玩家的操作精度和游戲流暢度。
- 降低穩定性:頻繁的網絡抖動可能導致連接不穩定,嚴重時甚至可能導致游戲斷線,需要重新連接,影響玩家的游戲進度和體驗。
為了減少網絡抖動對游戲的影響,通常會采用一些技術手段,如使用更穩定的網絡連接、優化網絡協議、設置合理的重傳機制等,以保證數據的可靠傳輸。
ok ok 既然已經了解了卡頓的元兇,那就需要不要讓他卡頓 或者至少不要太卡 怎么搞呢,辦法來了,加強網絡,網絡無敵,不卡了,搞定。竟然不用寫代碼,,,,,,,,,,,,,,
麻煩來了 多個測試和老板 再次提了好幾十個類型網絡問題的卡頓,
怎么辦法呢????????????????? 改代碼把
行把 我想辦法是分幀處理,
步驟如下 :
1.定義好一幀處理最大時間 比如就9ms
2.每次處理新包的時候 先看下離上次包處理時間是不是超過了9ms 如果超了直接return 滾回老家把你 ,
3.下一幀繼續處理后續包…
4.沒有了 卡頓看著明顯修復
5.等待測試反饋