- 浏览: 825143 次
- 性别:
- 来自: 哈尔滨
文章分类
最新评论
-
doloveme:
$sudo cp MONACO_Linux.ttf /usr/ ...
terminator 的配置 -
腾讯rep:
lowser
RSA加密算法c++简单实现 -
csuhanyong:
好YD啊,好YD
一图流:机械键盘各轴区别 -
doloveme:
1。其中:extman ,extmail下载http://ww ...
Ubuntu下安装postfix+extmail邮件服务器 -
doloveme:
repo sync出现“fatal: '../platform ...
Android 编译环境配置搭建(Ubuntu 12.04)及环境导致编译错误QA
现在,Java远程调用方法很多,各种方法的优缺点网络上也有很多的参考文章,这次我对几个典型的Java远程调用方法做了一个简单的性能分析比较,可供大家参考。
现在,Java远程调用方法很多,各种方法的优缺点网络上也有很多的参考文章,这次我对几个典型的Java远程调用方法做了一个简单的性能分析比较,可供大家参考。
测试环境:CPU:奔腾双核 T4500,内存:DDR3-1067 2G,Web容器:Tomcat6.0.33,操作系统:WinXP-sp3
测试项目:
①RMI:用Spring3集成发布。
②hessian:用Spring3集成发布到Tomcat容器。
③Java6 WebService:使用Java6原生WebService和注解,直接用Endpoint.publish发布服务。
④CXF:用Spring3集成发布到Tomcat容器。
测试结果:
说明:以上测试虽不是非常的精确,但基本能说明一定的问题。每项案例的服务端方法,都是简单方法,接收客户端传递的一个String类型参数,并打印到console。每轮测试取三次时间的平均值。所有单线程访问测试全部完成并正常处理请求,没有请求拒绝情况发生。而并发访问测试,除hessian中途抛异常无法完成,其余均正常完成测试。
结论:
RMI的性能最高,这已是公认,RMI底层基于Java远程方法协议(JRMP)和对象序列化技术,而JRMP是直接基于TCP/IP协议的封装,在网络上传输2 byte的有效数据,对于TCP而言,总共有478 byte被额外传输,而对于RMI, 1645byte被额外传输。可见RMI的效率还是相当不错的。JavaEE标准的EJB就是基于RMI的调用。
hessian是一个轻量级的remoting on http框架。Hessian没有采用WebService标准的SOAP协议,而是自己实现了一种二进制RPC(Remote Procedure Call Protocol,远程过程调用协议)协议。Hessian的设计理念就是简单高效,使用 Hessian 传输数据量比Soap协议要小很多。这也是为什么Hessian的性能要高于WebService。但是,尽管它再简单高效,它始终是基于Http协议上封装的,所以还是比Java的RMI效率要差一些。我看过其他的一些研究测试报告称Hessian在传输少量对象时,比RMI还要快速高效,但传输数据结构复杂的对象或大量数据对象时,较RMI要慢20%左右。这个结论在我的测试中还真没有发现,也许与测试环境或方法有关系吧。
Java6WebService 和 CXF的性能应该说是基本同级别,前者略高于后者。众所周知WebService是基于Soap协议实现的,而Soap协议是在Http协议基础上的XML定义和封装。所有的请求和响应都要被转化成符合SOAP标准的XML格式。显然这直接会导致效率的降低。
XML格式的协议是一种易读易理解的协议,但并不高效。解析和组装XML协议数据流都需要耗费系统的处理时间,所以,WebService的性能不如Hessian。这里要说一下的是Java6原生的WebService,开发起来非常方便,而且无需额外引入一大堆的Jar包。性能又强于CXF,至于Axis2和Axis1就更不用说,已经有很多测试表明CXF的性能是Axis2的2倍以上,是Axis1的2-6倍。
那么既然RMI性能那么好,为什么我们需要那么多其他的远程调用方式呢?这个问题又引发到了一个原始的真理。越原始越底层的技术效率就越高,但局限性也就越大。RMI是Java的特性,那么它必须基于JVM运行,也就是说RMI无法跨语言运行。而WebService就不同了,Soap是基于标准Http协议的,是一种与语言无关的字符级协议,所以它可以更好的实现异构系统的通信。这在我们现实环境中是非常有用的,相信大家还是WebService用的比较多点吧。
不足:这次的测试,还是存在很多不足之处。
Hessian的并发测试时,跑到中途大约300-400次调用时就抛异常中断了,具体原因还没来得及仔细分析。不知道是否与Spring集成或测试方法有关系。
另外,这次的远程方法都是简单处理方法,而在复杂方法调用环境下测试情况如何还需更进一步研究。
下一步,如果有时间,可以发布到Linux环境测试一下各项性能。
测试环境:CPU:奔腾双核 T4500,内存:DDR3-1067 2G,Web容器:Tomcat6.0.33,操作系统:WinXP-sp3
测试项目:
①RMI:用Spring3集成发布。
②hessian:用Spring3集成发布到Tomcat容器。
③Java6 WebService:使用Java6原生WebService和注解,直接用Endpoint.publish发布服务。
④CXF:用Spring3集成发布到Tomcat容器。
测试结果:
说明:以上测试虽不是非常的精确,但基本能说明一定的问题。每项案例的服务端方法,都是简单方法,接收客户端传递的一个String类型参数,并打印到console。每轮测试取三次时间的平均值。所有单线程访问测试全部完成并正常处理请求,没有请求拒绝情况发生。而并发访问测试,除hessian中途抛异常无法完成,其余均正常完成测试。
结论:
RMI的性能最高,这已是公认,RMI底层基于Java远程方法协议(JRMP)和对象序列化技术,而JRMP是直接基于TCP/IP协议的封装,在网络上传输2 byte的有效数据,对于TCP而言,总共有478 byte被额外传输,而对于RMI, 1645byte被额外传输。可见RMI的效率还是相当不错的。JavaEE标准的EJB就是基于RMI的调用。
hessian是一个轻量级的remoting on http框架。Hessian没有采用WebService标准的SOAP协议,而是自己实现了一种二进制RPC(Remote Procedure Call Protocol,远程过程调用协议)协议。Hessian的设计理念就是简单高效,使用 Hessian 传输数据量比Soap协议要小很多。这也是为什么Hessian的性能要高于WebService。但是,尽管它再简单高效,它始终是基于Http协议上封装的,所以还是比Java的RMI效率要差一些。我看过其他的一些研究测试报告称Hessian在传输少量对象时,比RMI还要快速高效,但传输数据结构复杂的对象或大量数据对象时,较RMI要慢20%左右。这个结论在我的测试中还真没有发现,也许与测试环境或方法有关系吧。
Java6WebService 和 CXF的性能应该说是基本同级别,前者略高于后者。众所周知WebService是基于Soap协议实现的,而Soap协议是在Http协议基础上的XML定义和封装。所有的请求和响应都要被转化成符合SOAP标准的XML格式。显然这直接会导致效率的降低。
XML格式的协议是一种易读易理解的协议,但并不高效。解析和组装XML协议数据流都需要耗费系统的处理时间,所以,WebService的性能不如Hessian。这里要说一下的是Java6原生的WebService,开发起来非常方便,而且无需额外引入一大堆的Jar包。性能又强于CXF,至于Axis2和Axis1就更不用说,已经有很多测试表明CXF的性能是Axis2的2倍以上,是Axis1的2-6倍。
那么既然RMI性能那么好,为什么我们需要那么多其他的远程调用方式呢?这个问题又引发到了一个原始的真理。越原始越底层的技术效率就越高,但局限性也就越大。RMI是Java的特性,那么它必须基于JVM运行,也就是说RMI无法跨语言运行。而WebService就不同了,Soap是基于标准Http协议的,是一种与语言无关的字符级协议,所以它可以更好的实现异构系统的通信。这在我们现实环境中是非常有用的,相信大家还是WebService用的比较多点吧。
不足:这次的测试,还是存在很多不足之处。
Hessian的并发测试时,跑到中途大约300-400次调用时就抛异常中断了,具体原因还没来得及仔细分析。不知道是否与Spring集成或测试方法有关系。
另外,这次的远程方法都是简单处理方法,而在复杂方法调用环境下测试情况如何还需更进一步研究。
下一步,如果有时间,可以发布到Linux环境测试一下各项性能。
发表评论
-
iOS技术支持
2020-03-06 17:08 313iOS技术支持有问题的可以留言。邮箱地址:huaonline ... -
intellij 打开工程在每个java文件上 有个红色的无效符
2015-07-24 13:52 1749说明该类不是可编译文件。在project Structure中 ... -
springmvc 链接数据库错误
2015-07-09 15:00 1037Caused by: org.xml.sax.SAXPar ... -
ubuntu永久修改主机名
2015-05-05 14:10 813ubuntu永久修改主机名 ... -
ubuntu mysql 配置 远程登陆
2015-03-11 22:37 7971.ubuntu安装 sudo apt-get i ... -
GIT查看、删除、重命名远程分支和TAG
2014-03-04 09:38 5932013-01-09:加入删除远程tag的内容2013-11 ... -
PowerDesigner15在生成SQL時報錯Generation aborted due to errors detected during the ver
2012-08-23 16:32 13151.用PowerDesigner15建模,在Data ... -
NoSQL数据库笔谈<转载>
2011-12-20 17:43 1552<p> </p> <div st ... -
rpc rmi区别
2011-12-19 13:30 13641. RMI和RPC之间最主要的区别在于方法是如何别调用的。 ... -
深入探讨SOAP、RPC和RMI
2011-12-19 13:28 912在 Brett McLaughlin 关于Soapbox ... -
Java RMI与RPC,JMS的比较
2011-12-19 13:28 907远程对象方法调用并不是新概念,远程过程调用 (RPC) ... -
右键打开UE
2011-12-15 13:39 952@echo off echo Windows Regi ... -
xstream
2011-09-07 15:28 1038xstream: XStream xst ... -
对比XStream和JSON
2011-09-07 14:29 904XStream是thoughtworks开发的开源产品,采用的 ... -
在Spring中使用XFire构建Web Service应用
2011-08-31 16:25 1106概述 XFire是与Axis 2并列的新一代Web Servi ... -
XFire构建web services客户端的五种方式
2011-08-31 16:15 976本文主要源于先前看到的一篇文章,为了自己以后查看方便也就转 ... -
XFire 最新生火指南(上)
2011-08-31 15:51 891基于发布在JavaEye的敬畏心情,本文又修改了一遍,与前 ... -
XFire 最新生火指南(下)
2011-08-31 15:49 10651. JSR181 JSR181式通过annotated ... -
xfire生成webservice客户端与服务注意事项
2011-08-30 17:32 15821.从Bean生成ws,要注意如果用了XmlB ... -
一天工作总结4.26
2011-04-26 17:34 936我擦,今天搞了许多! 首选弄了个struts的框架,当 ...
相关推荐
- 性能开销:远程调用涉及序列化、网络传输等操作,性能不如本地调用。 - 复杂性:实现和维护较为复杂,尤其是处理异常情况时。 #### 六、总结 RMI为Java开发者提供了一种强大的工具,用于构建分布式应用。理解RMI...
- 对于Java接口远程调用,通常会封装成服务类,如`RemoteRequestServiceImpl.java`和`RemoteRequetService.java`中的实现。服务类中会包含执行HTTP请求的方法,可能包括设置请求头、处理响应等逻辑。 4. **使用库...
Akka 是一个强大的工具包和框架,主要用于构建高度并发、分布式和反应式的应用程序,它基于actor模型。...通过这些步骤,你可以成功地使用Akka和Java实现TCP远程调用,构建出高性能、高并发的分布式系统。
Java 远程方法调用(Java RMI,Remote Method Invocation)是Java平台提供的一种用于构建分布式应用程序的技术。它允许一个对象在某个Java虚拟机(JVM)上执行的方法调用另一个在不同JVM上的对象的方法,仿佛它们是...
远程接口定义了可供远程调用的方法,它必须继承自`java.rmi.Remote`接口。远程对象则是实现了这个远程接口的类实例,它驻留在服务器端,负责处理客户端的调用请求。RMI通过Java序列化机制将方法调用和参数封装成消息...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间透明地调用对象的方法。在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象...
- **创建服务接口**:首先,你需要定义一个Java接口,这个接口将包含所有可供远程调用的方法。 - **实现服务接口**:创建一个类实现该接口,并提供具体的方法实现。 - **注册服务**:使用Hessian服务器端库(如...
在B/S架构中,Java RMI组件可以用于实现服务器端的业务逻辑,客户端通过HTTP请求触发远程调用。这种方式减少了HTTP的开销,提高了性能,特别适用于高交互性的Web应用。 4. **在C/S架构中的应用** C/S架构中,Java...
总之,通过Java实现分布式系统和远程方法调用是一项强大的技术,可以极大地提升应用程序的性能和可扩展性。通过深入理解RMI的工作机制和最佳实践,开发者可以构建出健壮且高效的分布式应用。而提供的资源文件可以...
1. **创建远程接口**:定义一个继承自Remote的接口,声明需要远程调用的方法。 2. **实现远程接口**:编写一个类实现这个接口,提供具体的方法实现。 3. **注册远程对象**:在服务器端创建远程对象实例,然后将其...
### 基于Java的远程方法调用及其应用 #### 一、远程方法调用(RMI)概述 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一个强大工具,允许一个Java虚拟机(JVM)上的对象调用另一个JVM上的...
Java远程调用框架是分布式系统中关键的技术,它允许运行在不同计算机上的应用程序相互通信,协同完成任务。本文探讨的是一种基于动态代理的Java远程调用框架,旨在解决传统远程调用技术如RMI(Remote Method ...
1. 远程接口(Remote Interface):定义了可以被远程调用的方法,这些接口需要继承自`java.rmi.Remote`接口,并且可能抛出`java.rmi.RemoteException`。 2. 远程实现(Remote Implementation):实现了远程接口的...
二、Java实现远程服务调用步骤 1. 添加依赖:首先,你需要在项目的类路径下添加HttpClient的相关依赖。如果你使用的是Maven,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org.apache.httpcomponents ...
"C语言调用java语言方法"是一个典型的跨语言通信场景,主要应用于Android平台上的JNI(Java Native Interface)开发。JNI允许Java代码和其他语言(如C/C++)进行无缝交互,提升性能或者利用已有的库资源。 首先,...
Java远程调用工具是开发过程中不可或缺的利器,尤其在处理分布式系统和服务之间的交互时。本文将深入探讨如何利用Java技术进行远程调用,特别是针对WebService和RESTful接口的调用,以及一个常用的工具——SoapUI。 ...
标题中的“Flex与Java交互 远程调用方式”指的是在Adobe Flex应用程序中与Java后端进行通信的技术。Flex是一种基于ActionScript的开源框架,用于构建富互联网应用程序(RIA),而Java是后端开发的常用语言。两者之间...
Java源码:调用远程API规范XINS是一个关于在Java环境中如何优雅地调用远程应用程序接口(API)的示例项目。XINS是一种基于XML的框架,它为创建可测试的、可重用的和文档齐全的Web服务提供了规范。在这个压缩包中,...
2. **类型安全**:由于使用Java语言,RMI提供了类型安全的远程调用。 3. **高性能**:RMI可以利用Java的自动内存管理和垃圾收集机制,减少资源消耗。 ### RMI的劣势 1. **平台依赖**:虽然Java有“一次编写,到处...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许Java对象在不同的网络环境中进行交互,就像调用本地方法一样。RMI系统的核心概念是客户端可以调用服务器端的对象上...