科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用JAVA写的测算服务器响应速度的程序

用JAVA写的测算服务器响应速度的程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

用JAVA写的测算服务器响应速度的程序

作者:dxaw 来源:赛迪网技术社区 2007年11月19日

关键字: 响应速度 测算 java

  • 评论
  • 分享微博
  • 分享邮件
1. 任务描述 AS214ys=  
需要做一个程序,对某一服务器运行的web server进行测算,看对提出的request做出相应的时间,并且在多个request同时提出时的响应时间。 y.oOLY+  
i^Sz<A59P  
2. 计划 7N*F(prr/f  
因为java sdk中包含有比较全面的class能够对http等多种协议的处理方法进行了封装,用起来比较方便,能够在比较短的时间内快速开发出这一测算工具。 ujlO`,qw9  
-~s,uK7ad  
需要2个功能: 53[t Yu"  
a. 因为不是仅仅对一个web server或者一个form进行测算,所以需要程序能够灵活处理,完成各种工作。我采用了配置文件的形式,让程序从配置文件中读取数据,并作相应动作。 %j`MGta<  
b.需要采用多线程方式,对同一个web server提交多次request. _tL(I9a.  
zkG5`x  
3.开发过程 iQJFM" w  
(读者可以跟随这一过程,自己动手写代码,到全文结束,就能有一个完整可用的程序了) u(0\V{d  
主要的工作都有TestThread来完成。代码如下: wa/\~|w  
class TestThread implements Runnable { 6Un5rD,YHg  
Parameter param; qxEWi6;4  
TestThread(Parameter par) { ]N"n8dT]&  
param = par; ED;=6rT  
} $~h}T = U  
public void run() { /4H v-3%<  
long time1 = new Date().getTime(); 2;|I/-  
try { &\>,w5Y%  
URL target = param.url; 6]S]PR?  
HttpURLConnection conn = (HttpURLConnection) target.openConnection(); A8B)cQ$G  
conn.setRequestMethod(param.method); Xhp;m  
int i; t$kk5{`  
for( i = 0; i < param.length; i++ ) { B %8K/iH  
conn.setRequestProperty(param.key, param.value); C`e'N;V#  
} 4 >"=$nR  
conn.connect(); m I[T` &"$  
BufferedReader in = new BufferedReader( X|KU24y  
new InputStreamReader(conn.getInputStream())); V69u`mJB  
String inputLine; d ]`S# G  
while( (inputLine = in.readLine()) != null ); al_X Q_3>  
} T;Ths9Rw!  
catch(Exception e) { _@# p]2  
} $] ]z?]B  
long time2 = new Date().getTime(); g  zX{  
System.out.println(time2 - time1); $& @NAC3`  
} v,p%_Vy'  
} TH<76RWT\h  
Yh6}6.  
class TestThread implements Runnable, 而不是用extends Thread, 的好处是独立设计一个类,这个类还可以extends其它的class, 而不是单独的extends Thread. 另外一个好处是,可以把处理方法放在各个不同的方法中,然后在void run()中调用,程序结构比较清晰。 $qFz\[c1z  
程序工作如下:  Qw.[y  
在初始化一个TestThread实例的时候,接受一个Parameter参数(稍候介绍),并在线程启动时,计算开始的时间,向目标机器发送请求包,接受目标机器的返回结果,再次计算时间,并得到两次时间之差,这就是服务器的响应时间。 =-P#>n  
具体程序可以自己看懂,就不多说了。 hBJLT&-d<  
class Parameter { L!9JJxDFd  
URL url; UoZk|{  
String[] key; +[W95oQY  
String[] value; .5b5B95gx-  
String method; .COYk,'  
int length = 0; NZ(5 x;#y  
public void addPair(String k, String v) { &D3YX  
Array.set(key, length, k); sgOJ$,?G  
Array.set(value, length, v); # N>lgkD  
length++; ny]eSQ:  
} @A)&/{  
} WA y\\,4  
是用来传递参数的一个类。参数是主程序从文件中读出来并存入这个类的一个对象里,然后通过初始化TestThread传递给它的对象。 5'DW,/ R  
public class TestServer { ldU@Lxk  
static int loopTimes = 500; / n!@?  
public Parameter readFromArgFile(String str){ RO!~eWqe5m  
FileInputStream fileInput; Mf|h$ZL  
BufferedReader br; IJ15&!  
Parameter param = new Parameter(); N%C.uxQ*f  
try { U)|H+hou  
fileInput = new FileInputStream(new File(str)); w3Z/WyN  
br = new BufferedReader( O2Qkg,pp  
new InputStreamReader( fileInput )); J ihw)kFp  
v Vq+^#  
String line; eUb7\9rZ  
while( (line = br.readLine()) != null ) { w\VHsq6@  
if( line.startsWith("URL") == true && line.indexOf("=") >= 3) { hTx_^g^L  
int f = line.indexOf("="); Ml"t Q  
String urlstring = line.substring(f+1); xPQi(j{  
urlstring.trim(); OX\y@[~a  
param.url = new URL(urlstring); `:ThM,ln  
} cr$/\G$T`  
else if( line.startsWith("METHOD") == true && line.indexOf("=") >= 3) { $aH,Oki0+  
int f = line.indexOf("="); Z ?3SX3  
String method = line.substring(f+1); d@|M2  
method.trim(); 'j3z2Gyyz  
param.method = method; `tAL`!7  
} &s IJv  
else if( line.indexOf("=") != -1 ) { &wwcm-_  
int f = line.indexOf("="); +T(NKG<%  
String key = line.substring(0, f-1); ,LkMQ>  
String value = line.substring(f+1); Dq/'R  
param.addPair(key.trim(), value.trim()); | GEC%'$#  
} A[&23  
} 6O I|  
fileInput.close(); >M!=7\  
br.close(); i]rG Dy5  
} 9OS-}+<F  
catch(FileNotFoundException e) { ,T=)Z!z  
System.out.println("File " + str + " not found."); 7|-|ew M,  
} 50Owh&?  
catch(NullPointerException e) { iH8Ut@KzB  
} &*V<c9UtvH  
catch(IOException e) { 9|"03;x+  
System.out.println(e); sn.6?OnV  
} w>~'UHA  
return param; o#qW ;L  
} \4]Z-*  
public static void main(String[] args) { ;^lg5!p\~  
int i; l#?Z'ELC[  
int j; vI@*  
Parameter param; zOl$UF0T5  
TestServer tester = new TestServer(); ="J.M  
for(i = 0; i < Array.getLength(args); i++) { v$qr`:,p  
param = tester.readFromArgFile(args); m Li  
for(j = 0; j < loopTimes; j++) { '[ _A465  
Thread th = new Thread(new TestThread(param)); L-LIBxob  
th.start(); ^enIVG^!N  
} 5n_*}^d  
} )p' oj.+s  
} Z?:N=pQ\B  
} M0^F8+^FH  
]<1I9~q+%U  
主程序main也比较简单,从命令行参数中读取文件名,并依次打开,读取其中的配置参数,创建Parameter对象,并传递给TestThread对象,然后启动TestThread线程。需要注意的是其中的错误处理,当发现某个文件读写错误的时候,是跳过这个文件而读取下一个文件,而不是简单的退出。 {J@uc:cQ-Q  
0ahfG h^'e  
就这么简单。(当然,适当的改写一下,就可以做一个加贴机或者灌水机之类的东东,那是你的爱好,和我无关:-)) qy(k^G  
程序全文列在最后,并附上了说明 XFt- ^.~  
------------------------------------------------------------------------------- >5l.k" ^  
/**************************************************************** 1D|c0+2vC  
Program: TestServer.java 7]|U !IN  
Description: send requests in multiple threads to server to test jy3aNZgQ>&  
its responses delayance > ugmZ5'E  
Author: ariesram 77H;M:YPi  
Date: Aug 23, 2001 CH`-Ipr  
Usage: java TestServer file1 file2 ... Pt)}(&9s?  
file format: 3Y+e>_0`  
URL=[Full URL of form] BFE)Tl8  
METHOD=GET|POST|... DTHK[Tc  
key1=value1 S][Ld.;u  
key2=value2 >I (cuR7  
and so on ... =ylKC\~f  
****************************************************************/ S<GqJx6KR  
import java.io.*; GK UD  
import java.lang.reflect.Array; | *x,  
import java.net.*; (xl3ZVkm#  
import java.util.*; AR60>}!h  
Kr,FMTeIC  
public class TestServer { %1^"_6h4(  
static int loopTimes = 500; \Ki?"Q  
public Parameter readFromArgFile(String str){ ~m-H6&|  
FileInputStream fileInput; a$?((-V  
BufferedReader br; ^h+mpq2y  
Parameter param = new Parameter(); i Y=Wb  
try { m[jK@H?'N  
fileInput = new FileInputStream(new File(str)); gJOCl K-\  
br = new BufferedReader( Q#i,^Z z)_  
new InputStreamReader( fileInput )); ,8PtSu  
R(.2EqIP  
String line; ?f&O  
while( (line = br.readLine()) != null ) { \D W[]7<  
if( line.startsWith("URL") == true && line.indexOf("=") >= 3) {  '|$[g_  
int f = line.indexOf("="); 8X\A[6P  
String urlstring = line.substring(f+1); ;$)ZMg(5  
urlstring.trim(); 5Ipm4@Wb  
param.url = new URL(urlstring); Y8@a}si5r  
} 'r} uw[]  
else if( line.startsWith("METHOD") == true && line.indexOf("=") >= 3) { q z %1%sc  
int f = line.indexOf("="); 4OuQX(1Av  
String method = line.substring(f+1); UZ0/SEF  
method.trim(); IO[5hC#  
param.method = method; YRq|'n]@c  
} ,/^ztImF  
else if( line.indexOf("=") != -1 ) { Z2>LpLhc  
int f = line.indexOf("="); D~HTOA6L(  
String key = line.substring(0, f-1); M-?Ur"<  
String value = line.substring(f+1); [Vd:eLy7  
param.addPair(key.trim(), value.trim()); }e\nw  
} b>{j+ r  
} 3o2 $nx  
fileInput.close(); B:w}`<M ;  
br.close(); /l <=\i/  
} f'@3`i@fz  
catch(FileNotFoundException e) { nVoX*+  
System.out.println("File " + str + " not found."); iY+J}.0t#  
} %O:1Q+!'8  
catch(NullPointerException e) { ,]$Z_T'  
}  HS&WMUb  
catch(IOException e) { ` Rc#T?^  
System.out.println(e); 'h Q08  
} MWf2`p  
return param; q|<m+rEv|  
} 7P0x2+w&  
public static void main(String[] args) { YSG2LM17  
int i; qW%]as  
int j; Y@!7=d[v&T  
Parameter param; )`uy*LW't  
TestServer tester = new TestServer(); sK8XVomJ  
for(i = 0; i < Array.getLength(args); i++) { )>Gwn83x  
param = tester.readFromArgFile(args); 8Cx_oq9p  
for(j = 0; j < loopTimes; j++) { jb8I%*  
Thread th = new Thread(new TestThread(param)); -<g@wcT  
th.start();  P{N/a  
} HKLQn=(E  
} 8~ H=r2z  
} 5AvZSxdWmm  
} w4-r O\  
class Parameter { N^^:@+,/"  
URL url; 1_$Y/4LE  
String[] key; -a+'3dQLr  
String[] value; @9rc'*K  
String method; }fyWF?r'  
int length = 0; {]W< e"  
public void addPair(String k, String v) { lf@dmDA2i  
Array.set(key, length, k); b6t'F-[]  
Array.set(value, length, v); ,~Ni:J  
length++; [H ;(R"  
} |`?qL+ Z  
} P:ge}3E[6;  
class TestThread implements Runnable { 47D`Rj d4  
Parameter param; Z= HvR_}T  
TestThread(Parameter par) { M4"&!a}K  
param = par; ,u2cn|)v0  
} +{gt'MW3(  
public void run() { > ~S(=,9u  
long time1 = new Date().getTime(); J\BX$'eL  
try { J02G|3  
URL target = param.url; N]~?M o7  
HttpURLConnection conn = (HttpURLConnection) target.openConnection(); mFsDt]z,s  
conn.setRequestMethod(param.method); \nmXt)RT  
int i; rAkq'a 7  
for( i = 0; i < param.length; i++ ) { :@ne;V  
conn.setRequestProperty(param.key, param.value); ~=|iH_f8}S  
} SA#Z #;  
conn.connect(); ^ :7[Ad!:  
BufferedReader in = new BufferedReader( 1.3eK*  
new InputStreamReader(conn.getInputStream())); yVN-C(v -`  
String inputLine; (<Oi2/U=  
while( (inputLine = in.readLine()) != null );  +[)VjR  
} H!yY:Y6 [  
catch(Exception e) { es-Kr.&L  
} 8^uCcQd`  
long time2 = new Date().getTime(); K%X.d{"b  
System.out.println(time2 - time1); r &nyn H  
} i(~.dR!R  
}
查看本文来源 l>
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章