一、测试结论
1、时间性能:Hessian略优,但REST和Hessian都在一个数量级,差别不大。
2、内存使用量:REST的内存使用量约为Hessian的两倍,多出的内存主要在Client端,需要对String进行Json解析。
二、测试例证
1、测试环境
Client和Server端,还有数据库都在同一主机。
Client运行在Tomcat7.0.57
Server运行在eclipse的Jetty
数据库为Mysql
测试数据大约为:250M
2、测试程序
(1)Hessian
public interface HessianServer {
public List<ImageAdvertisement> getImageAdvertisements();
}
public class HessianServerImpl implements HessianServer {
@Resource(name = "springHibernateImageAdvertisementManagement")
ImageAdvertisementManagement imageAdvertisementManagement;
@Override
public List<ImageAdvertisement> getImageAdvertisements() {
List<ImageAdvertisement> result=imageAdvertisementManagement.get();
return result;
}
}
@Controller
@RequestMapping("/hessianservice")
public class HessianController {
@Resource(name = "hessianClient")
HessianServer hessianServer;
@RequestMapping("/getService")
public @ResponseBody Map<String, Object> show() {
Map<String, Object> result = new HashMap<String, Object>();
result.put("startTime", new Date());
List<ImageAdvertisement> imageAdvertisements = hessianServer
.getImageAdvertisements();
result.put("endTime", new Date());
result.put("count", imageAdvertisements.size());
return result;
}
}
public class ImageAdvertisement implements Serializable {
private static final long serialVersionUID = -1687931350435057180L;
private String extension;
private byte[] bytes;
private String title;
private Date createTime;
}
(2)Rest
@Controller
@RequestMapping("/restserver")
public class RestServer {
@Resource(name = "springHibernateImageAdvertisementManagement")
ImageAdvertisementManagement imageAdvertisementManagement;
@RequestMapping("/getService")
public @ResponseBody List<ImageAdvertisement> getService() {
List<ImageAdvertisement> result=imageAdvertisementManagement.get();
return result;
}
}
@Controller
@RequestMapping("/restservice")
public class RestController {
private static RestTemplate createRestTemplate(){
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setReadTimeout(600000);
requestFactory.setConnectTimeout(10000);
return new RestTemplate(requestFactory);
}
@RequestMapping("/getService")
public @ResponseBody Map<String, Object> show() throws JsonParseException, JsonMappingException, IOException {
Map<String, Object> result = new HashMap<String, Object>();
RestTemplate restTemplate=createRestTemplate();
ObjectMapper objectMapper=new ObjectMapper();
JavaType javaType =objectMapper.getTypeFactory().constructParametricType(List.class, ImageAdvertisement.class);
List<ImageAdvertisement> imageAdvertisements=new ArrayList<ImageAdvertisement>();
result.put("startTime", new Date());
String restStr=restTemplate.getForObject("http://localhost:9080/demo/restserver/getService", String.class );
imageAdvertisements = objectMapper.readValue(restStr,javaType);
result.put("endTime", new Date());
result.put("count", imageAdvertisements.size());
return result;
}
}
3、测试结果
(1)Hessian
容器启动:
hessian client:java 341M
hessian server:javaw 555M
实例运行:
hessian client:java 859M
hessian server:javaw 1205M
start time:2015-05-11 12:54:57
end time:2015-05-11 12:55:26
total time:29s
(2)Hessian
容器启动:
rest client:java 343M
rest server:javaw 555M
实例运行:
rest client:java 1810M
rest server:javaw 1202M
start time 2015-05-11 12:46:01
end time 2015-05-11 12:46:49
total time: 48s