2015-06-13 95 views
0

我得到了它是這樣的一個樣本項目:配置客戶端吞吐量

  1. 客戶端A連接到服務器B
  2. A發送數據包B,B返回相同的數據包發送到
  3. 客戶端發送吞吐量可配置
  4. 測量每個數據包的週轉時間。

現在第3步是什麼令我困惑。

使用python,我能想到的「配置吞吐量」的唯一方法是在字符串中的字符之間設置一個延遲。

  1. 一個字符串「測試」
  2. 啓動計時器,然後發送「T」到服務器,讓服務器返回。
  3. 一旦服務器返回它,停止計時器並記錄它。

然後調用sleep()對於確定的時間量(這是可配置的一部分)

然後執行相同的字母

e 
s 
t 

日誌記錄,時間在兩者之間。

但是,這看起來很愚蠢,因爲我根本不影響客戶端和服務器之間的關係,只是設置發送字符之間的延遲。

或者我錯過了什麼?實際上有一種「配置」客戶A的吞吐量的方法,如果是這樣,那是什麼意思?

謝謝。

回答

1

您可以使客戶端A的吞吐量可配置 - 在1秒的更寬的窗口內。首先發送帶有1個字符的單個數據包會對您的吞吐量產生「負面影響」,因爲與負責連接的標頭相比,您的有效負載比較小。

您可以獲得體面的可測量吞吐量的方式是發送MSS數據包(通常在以太網環境中爲1460字節)。現在你可以做到這一點 - 每秒發送'n'包'突發'。所以例如。如果你需要14600的吞吐量,你可以做

burstsize = 10 
for i in range(burstsize): 
    sock.write(data) 

每一秒鐘。現在你怎麼做到 - 一秒鐘?那麼這有點棘手,很難準確 - 但是這樣的事情。

for之前做time.time(),做一個time.time()for後,再經過,對剩餘時間做一個簡單的select。 (這是引入延遲的一種方式)。因此,一個廣泛的骨架

while True: 
    t1 = time.time() 
    for i in range(burstsize): 
     sock.write(1460) 
    t2 = time.time() 
    if t2 - t1 < 1.0: 
     tout = 1.0 - (t2-t1) 
     select.select([], [], [], tout) # 

這是非常簡單的 - 但應該給一個公平的想法如何去做。

測量每個數據包的週轉時間非常困難 - 並沒有準確地說明TCP網絡中的等待時間,因爲這將受到TCP流量控制的影響。如果您有興趣瞭解底層網絡特性(如帶寬/延遲),最好使用UDP來衡量週轉時間。

+0

明白了。 我認爲他們想要的是第一個想法,發送一個大小爲n的數據包到服務器。 我不知道爲什麼我沒有想到這一點。 我不認爲我現在必須給它一個時間延遲,我想我可以編碼它將一個N大小的數據包發送到服務器,用戶配置N是什麼。 謝謝! – Marcin