官網:http://jagt.github.io/clumsy/index.html
html
官網上的介紹已經很易懂了,因此本文只是直接翻譯了官網內容。git
clumsy 能在 Windows 平臺下人工形成不穩定的網絡情況,方便你調試應用程序在極端網絡情況下的表現。程序員
利用封裝 Winodws Filtering Platform 的WinDivert 庫, clumsy 能實時的將系統接收和發出的網絡數據包攔截下來,人工的形成延遲,掉包和篡改操做後再進行發送。不管你是要重現網絡異常形成的程序錯誤,仍是評估你的應用 程序在不良網絡情況下的表現,clumsy 都能讓你在不須要額外添加代碼的狀況下,在系統層次幫你達到想要的效果:github
特點: 緩存
下載即用,不須要安裝任何東西。服務器
不須要額外設置,不須要修改你的程序的代碼。網絡
系統級別的網絡控制,能夠適用於命令行,圖形界面等任何 Windows 應用程序。tcp
不單單隻支持 HTTP,任何 TCP, UDP 的網絡鏈接均可以被處理。動畫
支持本地調試(服務器和客戶端都在 localhost)命令行
"熱插拔",你的程序能夠一直運行,而 clumsy 能夠隨時開啓和關閉。
實時調節各類參數,詳細控制網絡狀況。
下面的動畫展現了 clumsy 做用於一個本地的基於 netcat 的 UDP 服務器/客戶端的狀況。仔細觀察你能夠看到數據根據在 clumsy 的影響下產生了相應的變化。
若是你基本知道了 clumsy 是幹什麼用的,不妨到下載頁面選擇適用於你係統的版本進行下載。
clumsy 首先根據用戶選擇的 filter 來攔截指定的網絡數據。在 filter 中能夠設定你感興趣的協議(tcp/udp),端口號,是接收仍是發出的端口。你也能夠經過簡單的邏輯語句來進一步縮小範圍。當 clumsy 被激活時,只有符合這些標準的網絡數據會被進行處理,而你不感興趣的數據仍然會由系統正常傳輸。
當被 filter 的網絡數據包被攔截後,你能夠選擇 clumsy 提供的功能來有目的性的調整網絡狀況:
延遲(Lag),把數據包緩存一段時間後再發出,這樣可以模擬網絡延遲的情況。
掉包(Drop),隨機丟棄一些數據。
節流(Throttle),把一小段時間內的數據攔截下來後再在以後的同一時間一同發出去。
重發(Duplicate),隨機複製一些數據並與其自己一同發送。
亂序(Out of order),打亂數據包發送的順序。
篡改(Tamper),隨機修改小部分的包裹內容。
儘管當前寬帶網絡鏈接十分普及,但網絡傳輸其自己在本質上總不是穩定的。若是你的應用程序中沒有應對各類狀況的處理,那麼有可能一個丟失的 UDP 包裹都會讓你的程序崩潰。正確的調試這類行爲 顯然須要再代碼結構上進行仔細的設計和處理,還會很花功夫。並且在某些封裝緊密的開發環境(Unity3D 自帶的網絡庫多是一個例子)下會更麻煩。clumsy 以儘量減輕程序員負擔爲目標,但願提供一個簡單方便(但並不完美)的解決方案。