移動平臺遊戲網絡優化方案

目標

  1. 對程序的包量和通信進行優化,從根本上減緩網絡壓力
  2. 在出現網絡異常的時候,保證玩家能快速重新連接到服務器並繼續遊戲,並且體驗良好

重連條件

  1. NetworkException,Timeout 在這種顯式拋出異常的情況下,就說明網絡已經無法順利的和服務器進行連接,在這些消息類型中客戶端這邊就會觸發斷線重連流程
  2. 但實際情況中,還有可能發生客戶端網絡並未斷開,也並沒有異常拋出,但是卻出現客戶端和服務器無法正常進行收發消息的情況,這種情況一方面原因是中間鏈路的連接異常,另一方面也會由於延遲過高或丟包導致的TCP重發造成的延遲過大,影響到服務器和客戶端之間正常的收發消息,因此,對心跳包在一定時間內如果沒有收到返回包的情況下也認爲是一種掉線情況,會觸發斷線重連處理
  3. 客戶端切出遊戲,或者中間接到電話等導致遊戲暫停等情況,在一定時間後服務器會主動斷開和客戶端的連接,客戶端也需要主動觸發重連(服務器保持連接的時間儘可能長

技術方案

  1. 客戶端網絡的緩衝區擴大,TCP協議中,客戶端緩衝區在網絡不穩定的時候容易寫滿導致的問題
  2. 減少,壓縮數據包,合併小包和減少包量可以很大幅度的減少流量。而且也容易避免由於滑動窗口可發送部分的迅速充滿導致的網絡擁塞
  3. 單個包的大小過大也會迅速的撐大緩衝區,而且在傳輸過程中造成傳輸峯值,拆分過大的包,減緩網絡壓力,也能達到優化網絡的目的
  4. 檢測心跳超時和回包超時,心跳即每一定時間間隔(假定15秒)客戶端和服務器進行一次請求/應答,來判斷對方是否存活
  5. 檢測socket狀態
  6. 增加重連次數統計和重連成功次數統計上報

體驗優化

  1. 靜默重連,即在用戶無感知的情況下進行重連。一般檢測到斷線後,可以先嚐試靜默重連一定次數(比如3次)。如果在遊戲對戰過程中斷線,一般也會盡量嘗試靜默重連並且忽略重連次數,因爲此時彈出提示框會打斷對戰體驗的完整性。靜默重連提供了一種友好的用戶體驗,能應付一些短暫的網絡中斷(比如進出電梯或者進程從後臺喚醒等)。

  2. 顯式重連,在靜默重連一定次數(假定3次)之後,仍然無法連接成功的情況下,此時需要彈出提示框,中斷遊戲流程,告知用戶當前網絡環境較差,引導用戶在網絡較好時再嘗試連接。

  3. 服務器故障重連,這種情況下客戶端無論如何是連接不到遊戲服務器的。此時客戶端也需要給出正確的引導,而不是誤當作斷線故障處理。因此我們在斷線重連失敗之後多加一個步驟:嘗試連接CDN服務器,若CDN服務器可以正常連接,那麼說明網絡暢通,我們去獲取CDN上的雲配置,檢查是否有服務器日常維護的標識,如果有則給出服務器日常維護的公告,否則可以認爲服務器宕機,則給出服務器故障的公告。此步驟中若CDN服務器也無法連接,說明網絡確實不暢通,可以繼續走重連流程或者等待。

參考

某百萬大作的弱網處理及斷線重連方案
弱網絡環境下手遊斷線重連和協議重發方案
移動平臺遊戲網絡重連方案
手機客戶端弱網絡下的斷線重連處理

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