Hessian, CXF, Spring httpinvoke 对比

做了一个 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推荐
  • —软件人才免语言低担保 赴美带薪读研!—



你可能感兴趣的:(spring,hessian,CXF)