簡要說明:這是一個比較簡單的hessian客戶端和服務端,主要實現從客戶端發送指定的數據量到服務端,然后服務端在將接收到的數據原封不動返回到客戶端。設計該hessian客戶端和服務端的初衷是為了做一個轉發系統的性能測試,通過利用該客戶端和服務端來作為轉發系統的測試腳本和測試服務端。同時,該hessian客戶端和服務端也可作為簡單的hessian例子進行學習。
1、客戶端
工具類1:byte數組長度返回
package tool;
public class ByteActualLength {
public static int returnActualLength(byte[] data) {
int i = 0;
for (; i < data.length; i++) {
if (data[i] == '\0')
break;
}
return i;
}
}
工具類2:將文件數據寫入byte數組
package tool;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
public class FileWriteInByte {
@SuppressWarnings("resource")
public static byte[] toByte(String filePath) throws IOException {
FileChannel fc = null;
byte[] result = null;
try {
fc = new RandomAccessFile(filePath, "r").getChannel();
MappedByteBuffer byteBuffer = fc.map(MapMode.READ_ONLY, 0,
fc.size()).load();
System.out.println(byteBuffer.isLoaded());
// 返回true代表傳入為空;flase代表有數據
result = new byte[(int) fc.size()];
// System.out.println("返回數組長度為:"+fc.size());
if (byteBuffer.remaining() > 0) {
// System.out.println("remain");
byteBuffer.get(result, 0, byteBuffer.remaining());
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
fc.close();
}
return result;
}
}
測試客戶端:
package test_nwwhl_client;
import java.io.IOException;
import java.net.MalformedURLException;
import service.DataTransmissionService;
import tool.ByteActualLength;
import tool.FileWriteInByte;
import com.caucho.hessian.client.HessianProxyFactory;
public class PerformanceTest {
@SuppressWarnings("resource")
public static void main(String[] args) {
String url = "http://192.168.2.166:8088/nwwhlsystem_server/test";
byte[] result=null;
try {
result = FileWriteInByte.toByte("D:\\test100.txt");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HessianProxyFactory factory = new HessianProxyFactory();
DataTransmissionService DataTransmissionService=null;
//服務調用開始時間
long startTime=System.currentTimeMillis();
try {
DataTransmissionService = (DataTransmissionService) factory
.create(DataTransmissionService.class, url);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] data = DataTransmissionService.test(result);
//服務調用結束時間
long endTime=System.currentTimeMillis();
System.out.println("程序運行時間: "+(endTime-startTime)+"ms");
int bytelength = ByteActualLength.returnActualLength(data);
System.out.println("返回的數據長度為:" + bytelength);
}
}
2、服務端
第一個類:
package service;
public interface DataTransmissionService {
public byte[] test(byte[] data);
}
第二個類:
package service.impl;
import service.DataTransmissionService;
import com.caucho.hessian.server.HessianServlet;
@SuppressWarnings("serial")
public class DataTransmissionServiceImpl extends HessianServlet implements DataTransmissionService {
public byte[] test(byte[] data) {
return data;
}
}