Facebook網絡模擬測試工具ATC使用


Facebook在其工程博客(原文)上宣布開源移動網絡測試工具Augmented Traffic Control(ATC),我迅速試用了一番,非常不錯,對手游或者其他APP的調試和測試都非常有幫助,介紹給大家。

ATC

現在已經是APP時代了,由於手機網絡的特殊性,移動APP需要面臨更加復雜的網絡環境。在設計之初就要考慮如何應對各種網絡環境,比如很高的延遲,經常丟包,頻繁的斷線。特別是手游,斷線重連機制設計的好壞直接影響到游戲的體驗。

所以,在開發過程中模擬各種網絡環境進行測試變得越來越重要。在ATC出來之前,微軟曾經有一個網絡模擬工具NEWT(Network Emulator for Windows Toolkit),使用起來也是方便。(NEWT的誕生也蠻有意思,見:NEWT的前世今生

NEWT

那么,對比NEWT,ATC有些什么特點呢?

ATC有兩個最吸引人的特點:

  1. 在手機上通過Web界面就可以隨時切換不同的網絡環境。
  2. 多個手機可以連接到同一個WIFI下,相互之間模擬的網絡環境各不影響。

可以想象一下這個場景:一群程序猿和測試猴子熱火朝天的在辦公室忙活着,這時有一個叫ATC WiFi的熱點,任何人都可以將手機連接上去,通過Web界面隨意切換到各種不同的網絡環境下進行調試和測試……

想想都有點小激動呢,接下來就來試用一把,感受一下ATC的威力。

ATC只能運行在Linux上,所以搭建部署稍顯麻煩一些。本文將介紹在虛擬機里如何搭建ATC環境。大致有以下幾個步驟:

  1. VMWare裝個Ubuntu系統吧(以前我常用VirtualBox,各種兼容性問題被坑慘了不敢用了)。
  2. 除非你的機器有無線網卡,不然找一個USB無線網卡,用來設置WIFI熱點。
  3. 部署ATC

Ubuntu中設置WiFi熱點功能,在系統自帶的工具里可以直接開啟。但是,由於是Ad-hoc模式,Android手機根本搜不到信號。所以必須設置AP模式才能讓Android手機搜到。我折騰了好一陣,最后發現這篇文章最靠譜:http://my.oschina.net/eechen/blog/227230,照着設置一般就OK了。

接下來是部署ATC,其實也很簡單,官方文檔上寫的也很清楚:https://github.com/facebook/augmented-traffic-control

首先,必須安裝Python2.7以上版本,然后安裝pip:

sudo apt-get install python-pip python-dev build-essential)
sudo pip install --upgrade pip 

然后,使用pip直接安裝好ATC所有組件:

pip install atc_thrift atcd django-atc-api django-atc-demo-ui django-atc-profile-storage

接下來部署Django的web工程,提供手機訪問並用來配置和切換網絡用的。

1.使用django-admin生成一個新的django工程:

django-admin startproject atcui
cd atcui

2.修改atcui/settings.py,加入ATC相關的內容:

INSTALLED_APPS = (
    ...
    # Django ATC API
    'rest_framework',
    'atc_api',
    # Django ATC Demo UI
    'bootstrap_themes',
    'django_static_jquery',
    'atc_demo_ui',
    # Django ATC Profile Storage
    'atc_profile_storage',
)

3.修改atcui/urls.py,urlpatterns 中加入atc的url頁面:

...
...
from django.views.generic.base import RedirectView
 
urlpatterns = patterns('',
    ...
    # Django ATC API
    url(r'^api/v1/', include('atc_api.urls')),
    # Django ATC Demo UI
    url(r'^atc_demo_ui/', include('atc_demo_ui.urls')),
    # Django ATC profile storage
    url(r'^api/v1/profiles/', include('atc_profile_storage.urls')),
    url(r'^$', RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
)

4.更新一下數據庫:

python manage.py migrate

萬事俱備,就差啟動了……

前面設置WiFI熱點時,你還記得設置的無線網卡的名字嗎?嗯,就是wlan0,這個很重要。接下來要啟動網絡控制的核心組件atcd,需要通過參數指定提供Wifi熱點的內網用的網卡名字,外網訪問的網卡名默認是eth0(如果不是也需要通過--atcd-wan指定)

sudo atcd --atcd-lan wlan0

然后,啟動Django的工程:

sudo python manage.py runserver 0.0.0.0:8000

用手機連接上去試試吧。看看虛擬機的IP,比如我設置的是192.168.6.1,手機瀏覽器里訪問:http://192.168.6.1:8000

NewStart

在手機的界面里,你可以分別對網絡上行下行進行設置,主要設置的參數有:

  1. 網絡帶寬(bandwidth)
  2. 延遲(latency)
  3. 丟包率(packet loss)
  4. 錯包率(corrupted packets)
  5. 亂序率(packets ordering)

通過設置上面的參數,可以模擬出各種常用的網絡環境,比如:2G,3G,4G,WiFi等等,同時也可以模擬一些異常情況,比如信號很差,延遲很大,丟包率高的情況。具體有哪些場景和參數設置,歡迎大家一起交流交流,下面是Comcast提供的一份參數配置(國外的網絡和國內的很不一樣吧,僅供參考,歡迎大家修正和補充)

Name Latency Bandwidth Packet-loss
GPRS (good) 500 50 2
EDGE (good) 300 250 1.5
3G/HSDPA (good) 250 750 1.5
DIAL-UP (good) 185 40 2
DSL (poor) 70 2000 2
DSL (good) 40 8000 0.5
WIFI (good) 40 30000 0.2
Satellite 1500 - 0.2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM