- 浏览: 22776 次
最新评论
做了一个 Hessian, CXF, Spring httpinvoke 速度对比
时间消耗 cxf > spring httpinvoke > hessian
顺序调用1W次所耗时间
并发为10, 调用1W次所耗时间
当然, 都知道 cxf 和 hessian 实现以及应用场景不太一样, 但差这么多还是很意外的..
另外在并发测试时, spring httpinvoke cpu 消耗明显更高.
=============================================================
测试代码:
服务端
客户端
时间消耗 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 实现以及应用场景不太一样, 但差这么多还是很意外的..
另外在并发测试时, spring httpinvoke cpu 消耗明显更高.
=============================================================
测试代码:
服务端
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>
发表评论
-
httpclient 4.3 ignore certificate
2014-04-22 10:01 625public static CloseableHtt ... -
ActiveMQ 2 ActiveMQ ReplicationLevelDB
2014-01-08 21:26 1254这里只是简述我的配置以及碰到的问题. <broker ... -
ActiveMQ 1
2014-01-06 17:30 756下载安装 ActiveMQ 网上有 N 多例子, 就不说什么了 ... -
spring 集成 cxf 时, @PostConstruct 执行2次.
2013-12-02 18:26 962引用https://issues.apache.org/jir ... -
Java Object 有多大? (转帖)
2013-11-14 16:44 881public class ObjectMemorySize ... -
Executors.newCachedThreadPool 线程重用
2013-11-14 16:09 1156想起一个小细节: 线程池 CachedThreadPool ... -
一个最简单的 RPC 程序
2013-11-14 12:47 1009一个最简单的 RPC 程序. Service 接口 pu ... -
spring mvc 3.2.4 使用@ResponseBody 返回 406
2013-10-02 22:57 1207<mvc:annotation-driven co ... -
spring 3.1.1 使用 @Value 注解无法注入属性.
2013-09-25 17:24 1916spring 3.1.1 使用 @Value 注解无法注入属性 ... -
Java OSGi 入门
2013-08-26 20:02 974OSGi 的核心就是一个 JVM ... -
比较 fastjson gson.
2013-08-09 20:56 2795一个简单的 Model . public class Mo ... -
javassist case
2013-07-29 19:39 973一个普通的类,一个 name 属性, 只有 getter 方法 ... -
dev tips
2013-05-28 11:21 642换行符: String lineSeparator = (St ... -
Spring 自定义命名空间 xsd
2013-05-21 19:08 1584编写这两个文件 META-INF/spring.handler ...
相关推荐
- **HTTP协议**:使用Spring的Httpinvoke实现,适合JS调用或给Web应用使用。 - **Hessian协议**:基于HTTP通讯,提供与Hessian服务的互操作,适合中等大小的数据传输。 - **Memcache和Redis协议**:基于这两个数据库...
- 使用Spring的HttpInvoke实现,适合提供者数量多于消费者的场景,尤其是需要为应用程序和浏览器JS调用的情况。基于HTTP的短连接传输。 5. **Hessian协议**: - 基于HTTP通讯,使用Servlet暴露服务,Dubbo内嵌...
4. HTTP 协议:基于 Http 表单提交的远程调用协议,使用 Spring 的 HttpInvoke 实现。多个短连接,传输协议 HTTP,传入参数大小混合,提供者个数多于消费者,需要给应用程序和浏览器 JS 调用。 5. Hessian 协议:...
- 基于Http表单提交,使用Spring的HttpInvoke实现。 - 多个短连接,通过HTTP传输,适用于提供者多于消费者的场景,如Web应用和JavaScript调用。 5. **hessian协议**: - 集成了Hessian服务,基于HTTP通讯,使用...
4. **http协议**:基于Http表单提交,使用Spring的HttpInvoke实现,适用于提供者数量多于消费者的场景,适合应用程序和浏览器JS调用。 5. **hessian协议**:集成了Hessian服务,基于HTTP通讯,使用Servlet暴露服务...
4. http协议:使用基于Http表单提交的远程调用协议,通过Spring的HttpInvoke实现。它支持HTTP协议,适用于提供者数量多于消费者,需要支持应用程序和浏览器JS调用的场景。 5. hessian协议:基于Hessian服务,采用...
- **特点**:基于Http表单提交的远程调用协议,使用Spring的HttpInvoke实现。 - **传输协议**:HTTP - **应用场景**:适用于需要给应用程序和浏览器JS调用的场景。 - **优点**:易于理解和使用。 - **缺点**:性能...