[Python]製作一個類似iperf的測速程式-使用Socket
延續上一篇的Client/Server架構,在Server不變的情況下,新增新功能。主要是一個想法,不確定網路上測試網速的寫法是不是這樣。我的想法很簡單:我從Server或是Client端,傳一個固定大小檔案到另一端,然後再去除以開始和結束的間隔時間,就是網速。Client->Server就是Upload,Server->Client就是Download。
網路上找到的測試網域之間的網速工具,有名氣的是iperf,分成Client和Server端,先開啟Server端準備好之後,Client端透過IP去連線,在console畫面底下輸入一些參數,接著就根據參數執行,畫面上就會帶出一些結果。而這樣的方法,蠻適合用python去快速實現的。
我就模擬一個簡單的測速腳本,再把現下網頁測試流行的上下行測試加進來,腳本過程中,會分別將上傳和下載的數據顯示出來。
延續上一篇架構,除了connect/disconnect之外,我還新增了一些訊息:
最後我用index%10去當數值寫入,雖然不像亂數漂亮,但可以快速生成。
之後應該可以把一些參數當作引數,在執行時期就帶在後面,跟iperf會更像。
「腳本下載」
網路上找到的測試網域之間的網速工具,有名氣的是iperf,分成Client和Server端,先開啟Server端準備好之後,Client端透過IP去連線,在console畫面底下輸入一些參數,接著就根據參數執行,畫面上就會帶出一些結果。而這樣的方法,蠻適合用python去快速實現的。
我就模擬一個簡單的測速腳本,再把現下網頁測試流行的上下行測試加進來,腳本過程中,會分別將上傳和下載的數據顯示出來。
「架構規劃與定義」
前半部和上一篇一樣,Server開啟準備好後,等待Client連線。接著Client就發送一些訊息,告訴Server開始測試,彼此是透過一些特定訊息來傳遞的。先執行download測試,再來執行upload測試。
延續上一篇架構,除了connect/disconnect之外,我還新增了一些訊息:
- download:Client通知Server開始傳檔案了 download/start
- send:傳送送完的時間差,分成Client和Server兩種
- send/server:Server傳送測試檔案的時間差 send/server/test1/time
- send/client:Client傳送測試檔案的時間差 send/client/test1/time
最後我用index%10去當數值寫入,雖然不像亂數漂亮,但可以快速生成。
「實做部份」
Client/Server架構同上一篇就不再重複。我這邊偷懶方式寫。我看有人把Server download下來的檔案copy成自己所需,這樣upload時,Client不用重建一次。我是沒有這樣做,所以我腳本裡頭,Server也做一份,Client也做一份。理論上來說這些檔案應該當作暫存檔,傳完就丟棄的部份也沒做。另外我沒有參考文獻,不知道有規範的網路測速應該送哪些檔案大小,就用三個大小(1MB, 5MB, 10MB)當作demo了。之後應該可以把一些參數當作引數,在執行時期就帶在後面,跟iperf會更像。
「結果呈現部份」
我Server還是保留畫面,沒有更動,後端新增處理程序,所以多了一些log呈現。而Client是新建立的,因為是效法iperf,所以用console畫面呈現。「腳本下載」