资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。
1.任务描述
需要做一个程序,对某一服务器运行的web server进行测算,看对提出的request做出相应的时间,而且在多个request同时提出时的响应时间。
2. 计划
因为java sdk中包含有比较全面的class能够对http等多种协议的处理方法进行了封装,用起来比较方便, 能够在比较短的时间内快速开发出这一测算工具。
需要2个功能:a. 因为不是仅仅对一个web server或者一个form进行测算, 因此需要程序能够灵活处理,完成各种工作。我采用了配置文件的形式,让程序从配置文件中读取数据, 并作相应动作。b.需要采用多线程方式,对同一个web server提交多次request.
3.开发过程
(读者能够跟随这一过程, 自己动手写代码, 到全文结束,就能有一个完整可用的程序了)
主要的工作都有TestThread来完成。代码如下:
资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。class TestThread implements Runnable {
Parameter param;
TestThread(Parameter par) {param = par;
}public void run() {long time1 = new Date() .getTime() ;try {
URL target = param.url;
HttpURLConnection conn = (HttpURLConnection)target.openConnection() ;conn. setRequestMethod(param.method) ;int i ;for( i = 0; i param. length; i++ ) {conn. setRequestProperty(param.key[i] , param.value[i]) ;
资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。
}conn.connect() ;
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream() ) ) ;
String inputLine;while( (inputLine = in.readLine() ) != null ) ;
}catch(Exception e) {
}long time2 = new Date() .getTime() ;
System.out.println(time2 - time1) ;
}
}class TestThread implements Runnable, 而不是用extends Thread, 的好处是独立设计一个类,这个类还能够extends其它的class,而不是单独的
资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。extends Thread. 另外一个好处是, 能够把处理方法放在各个不同的方法中,然后在void run()中调用,程序结构比较清晰。
程序工作如下:
在初始化一个TestThread实例的时候,接受一个Parameter参数(稍候介绍) , 并在线程启动时, 计算开始的时间, 向目标机器发送请求包,接受目标机器的返回结果, 再次计算时间, 并得到两次时间之差, 这就是服务器的响应时间。
具体程序能够自己看懂,就不多说了。class Parameter {
URL url;
String[] key;
String[] value;
String method;int length = 0;public void addPair(String k, String v) {
Array. set(key, length, k) ;
资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。
Array. set(value, length, v) ;length++;
}
}
是用来传递参数的一个类。参数是主程序从文件中读出来并存入这个类的一个对象里,然后经过初始化TestThread传递给它的对象。public class TestServer {static int loopTimes = 500;public Parameter readFromArgFile(String str) {
FileInputStream fileInput;
BufferedReader br;
Parameter param = new Parameter() ;try {fileInput = new FileInputStream(new File(str) ) ;br = new BufferedReader(
资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。new InputStreamReader( fileInput ) ) ;
String line;while( (line = br.readLine() ) != null ) {if( line. startsWith("URL") == true && line. indexOf("=") = 3) {int f = line. indexOf("=") ;
String urlstring = line. substring(f+1) ;urlstring. trim() ;param.url = new URL(urlstring) ;
}else if( line. startsWith("METHOD") == true && line. indexOf("=") = 3) {int f = line. indexOf("=") ;
String method = line. substring(f+1) ;method. trim() ;param.method = method;
资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。}else if( line. indexOf("=") != -1 ) {int f = line. indexOf("=") ;
String key = line. substring(0, f-1) ;
String value = line. substring(f+1) ;param.addPair(key. trim() , value. trim() ) ;
}
}fileInput.close() ;br.close() ;
}catch(FileNotFoundException e) {
System.out.println("File " + str + " not found. ") ;}
资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。catch(NullPointerException e) {
}catch(IOException e) {
System.out.println(e) ;
}return param;
}public static void main(String[] args) {int i ;int j;
Parameter param;
TestServer tester = new TestServer() ;for(i = 0; i Array.getLength(args) ; i++) {param = tester.readFromArgFile(args[i]) ;for(j = 0; j loopTimes; j++) {
资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。
Thread th = new Thread(new TestThread(param) ) ;th. start() ;
}
}
}
}
主程序main也比较简单,从命令行参数中读取文件名, 并依次打开,读取其中的配置参数,创立Parameter对象, 并传递给TestThread对象,然后启动TestThread线程。需要注意的是其中的错误处理, 当发现某个文件读写错误的时候,是跳过这个文件而读取下一个文件,而不是简单的退出。
就这么简单。 (当然,适当的改写一下,就能够做一个加贴机或者灌水机之类的东东,那是你的爱好,和我无关: -) )
程序全文列在最后, 并附上了说明
---------------------------------------------------------------------
----------
腾讯云轻量应用服务器又要免费升级配置了,之前已经免费升级过一次了(腾讯云轻量应用服务器套餐配置升级 轻量老用户专享免费升配!),这次在上次的基础上再次升级。也许这就是良心云吧,名不虚传。腾讯云怎么样?腾讯云好不好。腾讯云轻量应用服务器 Lighthouse 是一种易于使用和管理、适合承载轻量级业务负载的云服务器,能帮助个人和企业在云端快速构建网站、博客、电商、论坛等各类应用以及开发测试环境,并提供...
如果我们较早关注NameCheap商家的朋友应该记得前几年商家黑色星期五和网络星期一的时候大促采用的闪购活动,每一个小时轮番变化一次促销活动而且限量的。那时候会导致拥挤官网打不开迟缓的问题。从去年开始,包括今年,NameCheap商家比较直接的告诉你黑色星期五和网络星期一为期6天的活动。没有给你限量的活动,只有限时六天,这个是到11月29日。如果我们有需要新注册、转入域名的可以参加,优惠力度还是比...
艾云怎么样?艾云是一家去年年底成立的国人主机商家,商家主要销售基于KVM虚拟架构的VPS服务,机房目前有美国洛杉矶、圣何塞和英国伦敦,目前商家推出了一些年付特价套餐,性价比非常高,洛杉矶套餐低至85元每年,给500M带宽,可解奈飞,另外圣何塞也有特价机器;1核/1G/20G SSD/3T/2.5Gbps,有需要的朋友以入手。点击进入:艾云官方网站艾云vps促销套餐:KVM虚拟架构,自带20G的防御...