Hessian, CXF, Spring httpinvoke 对比

标签: hessian cxf spring | 发表时间:2013-11-25 08:25 | 作者:id.alex
出处:http://www.iteye.com
做了一个 Hessian, CXF, Spring httpinvoke 速度对比

时间消耗  cxf > spring httpinvoke > hessian

顺序调用1W次所耗时间

hessian 2652-2922
spring httpinvoke 4080-4949
cxf 9732-10432


并发为10, 调用1W次所耗时间
hessian 1625-1753
spring httpinvoke 3165-3338
cxf 5709-5863


当然, 都知道 cxf 和 hessian 实现以及应用场景不太一样, 但差这么多还是很意外的..

=============================================================
测试代码:

服务端

public class Param implements Serializable {
	private static final long serialVersionUID = 7414597783500374225L;
	private Integer i;
	private String s;
	private Long l;
	private List<Param> list = new ArrayList<Param>();
	private boolean b;
......
}

public class Result implements Serializable {
	private static final long serialVersionUID = 2729153186117404170L;
	private Integer i;
	private String s;
	private Long l;
	private List<Result> list;
	private boolean b;
......
}


@WebService
public interface TestService {
	Result method(Param p);
}


@Service
@WebService(endpointInterface = "org.alex.test.webservice.TestService")
public class TestServiceImpl implements TestService {

	@Override
	public Result method(Param p) {
		Result r = new Result();
		BeanUtils.copyProperties(p, r);
		return r;
	}

}



	<!-- cxf -->
	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
	<jaxws:endpoint id="testCxfService" implementor="org.alex.test.webservice.TestServiceImpl" address="/cxf" />


	<bean id="testServiceImpl" class="org.alex.test.webservice.TestServiceImpl" />

	<!-- hessian -->
	<bean name="/hes" class="org.springframework.remoting.caucho.HessianServiceExporter">
		<property name="service" ref="testServiceImpl" />
		<property name="serviceInterface" value="org.alex.test.webservice.TestService" />
	</bean>

	<!-- spring http invoke -->
	<bean name="/spr" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
		<property name="service" ref="testServiceImpl" />
		<property name="serviceInterface" value="org.alex.test.webservice.TestService" />
	</bean>


客户端

public class Client {

	static String CXF = "cxfService";
	static String HESSIAN = "hesService";
	static String SPRING = "sprService";

	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("client.xml");

		TestService service = (TestService) ac.getBean(SPRING);

		Param p = new Param();
		p.setI(100);
		p.setB(true);
		p.setL(1000L);
		p.setS("123456789123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()_\r\n\\\t");
		p.getList().add(new Param());
		p.getList().add(new Param());
		p.getList().add(new Param());
		service.method(p);

		long now = System.currentTimeMillis();
		for (int i = 0; i < 10000; i++) {
			service.method(p);
		}
		System.out.println(System.currentTimeMillis() - now);
	}
}


public class MultiThreadClient {

	static String CXF = "cxfService";
	static String HESSIAN = "hesService";
	static String SPRING = "sprService";

	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("client.xml");

		TestService service = (TestService) ac.getBean(HESSIAN);

		Param p = new Param();
		p.setI(100);
		p.setB(true);
		p.setL(1000L);
		p.setS("123456789123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()_\r\n\\\t");
		p.getList().add(new Param());
		p.getList().add(new Param());
		p.getList().add(new Param());
		service.method(p);

		ExecutorService exe = Executors.newFixedThreadPool(10);
		Task task = new Task(service, p);

		long now = System.currentTimeMillis();
		for (int i = 0; i < 10000; i++) {
			exe.submit(task);
		}
		exe.shutdown();
		while (!exe.isTerminated()) {
		}
		System.out.println(System.currentTimeMillis() - now);

	}

	private static class Task implements Runnable {

		TestService service;
		Param p;

		public Task(TestService service, Param p) {
			this.service = service;
			this.p = p;
		}

		@Override
		public void run() {
			service.method(p);
		}
	}
}



	<jaxws:client id="cxfService" serviceClass="org.alex.test.webservice.TestService" address="http://localhost:8080/webservice/cxf/cxf?wsdl" />

	<bean id="hesService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
		<property name="serviceUrl" value="http://localhost:8080/webservice/app/hes" />
		<property name="serviceInterface" value="org.alex.test.webservice.TestService" />
	</bean>

	<bean id="sprService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
		<property name="serviceUrl" value="http://localhost:8080/webservice/app/spr" />
		<property name="serviceInterface" value="org.alex.test.webservice.TestService" />
	</bean>





已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [hessian cxf spring] 推荐:

Hessian, CXF, Spring httpinvoke 对比

- - Java - 编程语言 - ITeye博客
做了一个 Hessian, CXF, Spring httpinvoke 速度对比. 时间消耗  cxf > spring httpinvoke > hessian. 并发为10, 调用1W次所耗时间. 当然, 都知道 cxf 和 hessian 实现以及应用场景不太一样, 但差这么多还是很意外的.

简单Spring+hessian

- - Web前端 - ITeye博客
简单的Spring+hessian. dist\modules里面的 spring-webmvc.jar . lib\caucho 里面的hessian-3.1.3.jar. 里面有个接口interface:. 建立一个model层:(实现Serializable接口). 在WEB-INF下面创建一个remoting-servlet.xml:.

Hessian和Spring整合

- - CSDN博客推荐文章
    上篇文章简单的介绍了Hessian以及它的一些执行原理,现在我们来看看它与强大框架spring的集成吧. 一、服务端使用spring,我们得下载Hessian支持包和Spring的相应的jar包,可以在我的资源库中进行免费下载:. 1、新建web工程,我取名为HessianSpringServer,在web/WEB-INFO/BIN中导入我们相应的jar包,跟上篇文章一样,编写我们的实体类和接口类、以及接口实现类:.

cxf + spring 的WS Security示例

- - RSS - IT博客云
WSPasswordCallback的 passwordType属性和 password属性都为null,你只能获得用户名(identifier),一般这里的逻辑是使用这个用户名到数据库中查询其密码,然后再设置到 password属性,WSS4J会自动比较客户端传来的值和你设置的这个值. 你可能会问为什么这里CXF不把客户端提交的密码传入让我们在 ServerPasswordCallbackHandler中比较呢.

webService学习之cxf与spring的简单整合

- - 企业架构 - ITeye博客
一:先把cxf的jar包导进去,我是直接在官网下载的cxf的包,解压后直接把lib文件夹里的jar一次.    性全部丢进去了,因为在学习,还不知道哪些包要哪些包不要的,所以干脆直接放进去. . . .

Hessian原理

- - 互联网 - ITeye博客
Hessian 原理分析. 一.      远程通讯协议的基本原理. 二.      应用级协议 Binary-RPC. Binary-RPC 是一种和 RMI 类似的远程调用的协议,它和 RMI 的不同之处在于它以标准的二进制格式来定义请求的信息 ( 请求的对象、方法、参数等 ) ,这样的好处是什么呢,就是在跨语言通讯的时候也可以使用.

WebService之JAX-WS、CXF、Spring3.0+

- - 博客园_首页
          面对工作的需要,web服务这一块一直都在身边转悠着. 既然工作中需要这些,作为程序员就应该去了解和学习. 下面主要简述采用CXF+Spring+JAX-WS来发布WebService服务,以及创建客户端调用服务.          1、先了解关于WebService的相关概念以及一些专有名词的解释:.

webservice编程基础—cxf

- - ITeye博客
最近研究了一下cxf的使用,主要的步骤如下:. 下载最新的cxf包apache-cxf-2.6.2.tar.zip,并解压,有一个lib文件,里面的jar包,就是webservice需要的(不完全需要,看你的应用,但是懒的分),加载进你的webservice的工程即可. 配置两个配置文件,为beans.xml和web.xml,内容如下:.

CXF WEBSERVICE 安全验证

- - 企业架构 - ITeye博客
CXF 封装的接口,不希望对外暴露 WSDL结构,找到的CXF安全认证技术都是基于拦截器,在调用的时候返回认证错误信息, 不能保护WSDL不被看到,后来看到别人的一个实现方式最简单有效,基于URL拦截的安全保护,用FILTER. 现在把这2种安全保护都记录下来,备用. 参考: http://www.myexception.cn/open-source/1505475.html.

Hessian介绍及简单应用

- - Java - 编程语言 - ITeye博客
一、首先先说Hessian是什么.     Hessian:hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能,相比WebService,Hessian更简单、快捷. 采用的是二进制RPC协议,因为采用了二进制协议,所以它很适合于发送二进制数据,Hessian主要作面向对象的消息通信.