2011-10-15 41 views
1

這可能看起來像一個奇怪的問題,但我試圖在幾秒內發送儘可能多的HTTP POST請求。只能發送10個HTTP POST請求/秒?

我想知道如果任何人有任何建議,因爲我目前只實現了約6-9的請求秒,這似乎相當低。我的代碼如下 - 我使用Apache的百科全書HTTP庫:

import org.apache.commons.httpclient.HttpClient; 
    import org.apache.commons.httpclient.methods.GetMethod; 
    import org.apache.commons.httpclient.methods.PostMethod; 


long start = System.currentTimeMillis(); 
long end = start + 4000; 
int count = 0; 
while (System.currentTimeMillis() < end) 
     { 
     count++; 
     httpClient.executeMethod(method); 
     } 
System.out.println((double)count/4 + " reqs/sec"); 

POST方法創建一次事先:

String body= getBodyString(); 
PostMethod method = new PostMethod(Url); 
method.setRequestEntity(new StringRequestEntity(body)); 
method.setRequestHeader(...etc)  

我猜有某種內在的順序行爲,由此httpclient正在等待響應?就我而言,我並不在意這種迴應,所以大概有一種方法可以提高通話費率。也許我可以準備下一個請求,而一個正在發送等。也可以有一個更有效和快速的圖書館?

我是新來的這種類型的代碼,所以我很抱歉,如果這個問題沒有多大意義。

+0

你的標題肯定使它看起來像這將是惡意的目的... – animuson

+0

我可以向你保證它不適用於任何惡意。 – Wozza

回答

5

使用線程,盧克!

您的客戶受到服務器平均響應時間的限制。如果服務器以100毫秒響應,則每秒不會超過10次請求。

但是,如果你在同一時間發送 10個請求和服務器能夠以相同的響應時間,同時處理他們,你就立即達到100請求/秒。

如果你的目標是壓力測試你的應用程序,有一些很好的免費工具,如JMeterab。如果你真的發垃圾郵件給別人的網站:對你不好意思。他們的網絡基礎設施很可能很快就會中斷你的工作。

+0

線程就是這樣!謝謝。 – Wozza

3

爲什麼不在單獨的線程中執行每個帖子?指令:

httpClient.executeMethod(method); 

需要它的時候,如果你正在尋找增加POST的數量,我會使用的請求一組線程(線程池)

+0

謝謝。我會嘗試使用線程! – Wozza