熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

一個用JAVA寫測算服務器響應速度程序

2022-06-13   來源: Java核心技術 

   任務描述

  需要做一個程序對某一服務器運行的web server進行測算看對提出的request做出相應的時間並且在多個request同時提出時的響應時間

   計劃

  因為java sdk中包含有比較全面的class能夠對http等多種協議的處理方法進行了封裝用起來比較方便能夠在比較短的時間內快速開發出這一測算工具

  需要個功能

  a 因為不是僅僅對一個web server或者一個form進行測算所以需要程序能夠靈活處理完成各種工作我采用了配置文件的形式讓程序從配置文件中讀取數據並作相應動作

  b需要采用多線程方式對同一個web server提交多次request

  開發過程

  (讀者可以跟隨這一過程自己動手寫代碼到全文結束就能有一個完整可用的程序了)

  主要的工作都有TestThread來完成代碼如下
    
      class TestThread implements Runnable { 
Parameter param; 
TestThread(Parameter par) { 
param = par; 

public void run() { 
long time = new Date()getTime(); 
try { 
URL target = paramurl; 
HttpURLConnection conn = (HttpURLConnection) targetopenConnection(); 
connsetRequestMethod(thod); 
int i; 
for( i = ; i < paramlength; i++ ) { 
connsetRequestProperty(paramkey[i] paramvalue[i]); 

nnect(); 
BufferedReader in = new BufferedReader( 
new InputStreamReader(conngetInputStream())); 
String inputLine; 
while( (inputLine = inreadLine()) != null ); 

catch(Exception e) { 

long time = new Date()getTime(); 
Systemoutprintln(time  time); 


    
    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 = 
public void addPair(String k String v) { 
Arrayset(key length k); 
Arrayset(value length v); 
length++; 

}    
    是用來傳遞參數的一個類參數是主程序從文件中讀出來並存入這個類的一個對象裡然後通過初始化TestThread傳遞給它的對象

    public class TestServer { 
static int loopTimes = 
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 = brreadLine()) != null ) { 
if( linestartsWith(URL) == true && lineindexOf(=) >= ) { 
int f = lineindexOf(=); 
String urlstring = linesubstring(f+); 
urlstringtrim(); 
paramurl = new URL(urlstring); 

else if( linestartsWith(METHOD) == true && lineindexOf(=) >= ) { 
int f = lineindexOf(=); 
String method = linesubstring(f+); 
methodtrim(); 
thod = method; 

else if( lineindexOf(=) !=  ) { 
int f = lineindexOf(=); 
String key = linesubstring( f); 
String value = linesubstring(f+); 
paramaddPair(keytrim() valuetrim()); 


fileInputclose(); 
brclose(); 

catch(FileNotFoundException e) { 
Systemoutprintln(File  + str +  not found); 

catch(NullPointerException e) { 

catch(IOException e) { 
Systemoutprintln(e); 

return param; 

public static void main(String[] args) { 
int i; 
int j; 
Parameter param; 
TestServer tester = new TestServer(); 
for(i = ; i < ArraygetLength(args); i++) { 
param = testerreadFromArgFile(args[i]); 
for(j = ; j < loopTimes; j++) { 
Thread th = new Thread(new TestThread(param)); 
thstart(); 



}     
    主程序main也比較簡單從命令行參數中讀取文件名並依次打開讀取其中的配置參數創建Parameter對象並傳遞給TestThread對象然後啟動TestThread線程需要注意的是其中的錯誤處理當發現某個文件讀寫錯誤的時候是跳過這個文件而讀取下一個文件而不是簡單的退出

  就這麼簡單(當然適當的改寫一下就可以做一個加貼機或者灌水機之類的東東那是你的愛好和我無關))

  程序全文列在最後並附上了說明

     
/**************************************************************** 
Program: TestServerjava 
Description: send requests in multiple threads to server to test 
its responses delayance 
Author: ariesram  
Date: Aug   
Usage: java TestServer file file  
file format: 
URL=[Full URL of form] 
METHOD=GET|POST| 
key=value 
key=value 
and so on  
****************************************************************/ 
import javaio*; 
import javalangreflectArray; 
import *; 
import javautil*; 

public class TestServer { 
static int loopTimes = 
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 = brreadLine()) != null ) { 
if( linestartsWith(URL) == true && lineindexOf(=) >= ) { 
int f = lineindexOf(=); 
String urlstring = linesubstring(f+); 
urlstringtrim(); 
paramurl = new URL(urlstring); 

else if( linestartsWith(METHOD) == true && lineindexOf(=) >= ) { 
int f = lineindexOf(=); 
String method = linesubstring(f+); 
methodtrim(); 
thod = method; 

else if( lineindexOf(=) !=  ) { 
int f = lineindexOf(=); 
String key = linesubstring( f); 
String value = linesubstring(f+); 
paramaddPair(keytrim() valuetrim()); 


fileInputclose(); 
brclose(); 

catch(FileNotFoundException e) { 
Systemoutprintln(File  + str +  not found); 

catch(NullPointerException e) { 

catch(IOException e) { 
Systemoutprintln(e); 

return param; 

public static void main(String[] args) { 
int i; 
int j; 
Parameter param; 
TestServer tester = new TestServer(); 
for(i = ; i < ArraygetLength(args); i++) { 
param = testerreadFromArgFile(args[i]); 
for(j = ; j < loopTimes; j++) { 
Thread th = new Thread(new TestThread(param)); 
thstart(); 




class Parameter { 
URL url; 
String[] key; 
String[] value; 
String method; 
int length = 
public void addPair(String k String v) { 
Arrayset(key length k); 
Arrayset(value length v); 
length++; 


class TestThread implements Runnable { 
Parameter param; 
TestThread(Parameter par) { 
param = par; 

public void run() { 
long time = new Date()getTime(); 
try { 
URL target = paramurl; 
HttpURLConnection conn = (HttpURLConnection) targetopenConnection(); 
connsetRequestMethod(thod); 
int i; 
for( i = ; i < paramlength; i++ ) { 
connsetRequestProperty(paramkey[i] paramvalue[i]); 

nnect(); 
BufferedReader in = new BufferedReader( 
new InputStreamReader(conngetInputStream())); 
String inputLine; 
while( (inputLine = inreadLine()) != null ); 

catch(Exception e) { 

long time = new Date()getTime(); 
Systemoutprintln(time  time); 


   


From:http://tw.wingwit.com/Article/program/Java/hx/201311/27192.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.