0,0 → 1,147 |
package ak.httpbench; |
|
import org.apache.commons.logging.Log; |
import org.apache.commons.logging.LogFactory; |
|
import org.apache.commons.httpclient.HttpClient; |
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; |
import org.apache.commons.httpclient.methods.GetMethod; |
|
public class HttpBench |
{ |
public static void main(String[] args) |
throws Exception |
{ |
(new HttpThread(null, new String[] { "http://sun/" } )).run(); |
} |
} |
|
class HttpThread |
{ |
private static int threadCount = 0; |
private static Log log = LogFactory.getLog(HttpThread.class); |
|
private int id; |
private String firstUrl; // is used one time only, may be null |
private String[] urls; |
private int requestNumber = 1; |
private int requestPerConnection = 0; // 0 == all |
private int sleepMin = 0; |
private int sleepMax = 0; |
|
public HttpThread(String firstUrl, String[] urls) |
{ |
id = threadCount++; |
this.firstUrl = firstUrl; |
this.urls = urls; |
} |
|
public int getId() |
{ |
return id; |
} |
|
public int getRequestNumber() |
{ |
return requestNumber; |
} |
|
public void setRequestNumber(int requestNumber) |
{ |
this.requestNumber = requestNumber; |
} |
|
public int getRequestPerConnection() |
{ |
return requestPerConnection; |
} |
|
public void setRequestPerConnection(int requestPerConnection) |
{ |
this.requestPerConnection = requestPerConnection; |
} |
|
public int getSleepMin() |
{ |
return sleepMin; |
} |
|
public void setSleepMin(int sleepMin) |
{ |
this.sleepMin = sleepMin; |
} |
|
public int getSleepMax() |
{ |
return sleepMax; |
} |
|
public void setSleepMax(int sleepMax) |
{ |
this.sleepMax = sleepMax; |
} |
|
public void run() |
{ |
long startTime = 0; |
long stopTime = 0; |
long sumSleep = 0; |
|
log.info(Integer.toString(id) + ": start"); |
|
try { |
HttpClient client = new HttpClient(); |
|
startTime = System.currentTimeMillis(); |
for(int i = 0; i < requestNumber; i++) { |
String url; |
if(i == 0 && firstUrl != null) |
url = firstUrl; |
else |
url = urls[(firstUrl == null ? i : i-1) % urls.length]; |
|
GetMethod get = new GetMethod(url); |
|
try { |
int result = client.executeMethod(get); |
if(log.isTraceEnabled()) { |
String response = get.getResponseBodyAsString(); |
log.trace(Integer.toString(id) + ": got " + result + "\n'" |
+ response.substring(0, 100) + "'"); |
} |
else if(log.isDebugEnabled()) { |
log.debug(Integer.toString(id) + ": got " + result); |
} |
} |
finally { |
get.releaseConnection(); |
} |
|
if(requestPerConnection > 0 && (i+1) % requestPerConnection == 0 |
&& i < requestNumber-1) |
{ |
log.debug(Integer.toString(id) |
+ ": request per connection limit reached at " + i); |
client.getHttpConnectionManager().closeIdleConnections(0); |
} |
|
if(sleepMax > 0 && i < requestNumber-1) { |
long sleep = (long)(Math.random() * (sleepMax - sleepMin)) + sleepMin; |
log.debug(Integer.toString(id) + ": sleep for " + sleep + "ms"); |
Thread.currentThread().sleep(sleep); |
sumSleep += sleep; |
} |
} |
|
client.getHttpConnectionManager().closeIdleConnections(0); |
stopTime = System.currentTimeMillis(); |
} |
catch(Exception ex) { |
log.warn(Integer.toString(id), ex); |
} |
|
log.info(Integer.toString(id) + ": done" + (stopTime > 0 ? " in " + (stopTime - startTime) |
+ "ms, sleeped for " + sumSleep + " ms" : "")); |
} |
} |
|