- 浏览: 367200 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (186)
- J2EE (46)
- spring (4)
- Applet (7)
- 网页前端 (10)
- 生活与工作 (55)
- 开放的世界 (10)
- linux (16)
- j2me (2)
- android (5)
- ExtJS (1)
- 架构师与设计 (7)
- 开发平台 (2)
- Eclipse (4)
- 教育 (0)
- 数据库 (9)
- English (1)
- Jetty (2)
- 未分类 (1)
- 工具 (2)
- flex (2)
- synchronized (1)
- maven (2)
- command (0)
- shell (1)
- web (1)
- qq (3)
- wine (3)
- chrome (1)
- extensions (1)
- plugin (1)
- 插件 (1)
- ssh (1)
- 内网 (1)
- J2EE excel (1)
- ubuntu (4)
- storm (2)
- hadoop (1)
最新评论
-
skzr.org:
jdbc:mysql://localhost:3306/?us ...
storm topology all in one spring文件合并 -
chenghong726:
你好,我用你这个方法,上传文件72M一直卡在 mapper.s ...
超大excel读取 43万记录 26M文件 -
海hai:
您好我对这篇文章很敢兴趣可以和你请教下吗?我qq9034418 ...
淘宝top自动授权页面,方便大家调试top应用 -
skzr.org:
首先感谢你的关注:)yaerfeng1989 写道最代码上有更 ...
[MAVEN]web工程的调试 -
skzr.org:
最新消息2013-12-17:腾讯再次弹出消息,我的QQ201 ...
ubuntu 12.04安装QQ2012
我的测试:
环境:
- 使用spring做为粘合剂
- tomcat7发布服务端,部署RMI和HTTPInvoker两种
- tomcat7发布客户端,调用服务端的服务
- 客户端页面直接调用服务端的远程服务(RMI和HTTPInvoker两种)
- 直接使用ab链接 ab -c 20 -n 10000 http://localhost:客户端tomcat/
我的测试结果:
协议 请求数/秒 ms(mean) ms
rmi 2200/s 8.79 0.44
httpinvoker 2000/s 10 0.57
对于企业应用,应该足够使用了.
java中远程调用通讯协议的选择和比较,详见:
[装载自javaG的]几种通讯协议的比较
一、综述
本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能。
RMI是java语言本身提供的远程通讯协议,稳定高效,是EJB的基础。但它只能用于JAVA程序之间的通讯。
Hessian和Burlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防火墙端口。协议的规范公开,可以用于任意语言。
Httpinvoker是SpringFramework提供的远程通讯协议,只能用于JAVA程序间的通讯,且服务端和客户端必须使用SpringFramework。
Web service是连接异构系统或异构语言的首选协议,它使用SOAP形式通讯,可以用于任何语言,目前的许多开发工具对其的支持也很好。
测试结果显示,几种协议的通讯效率依次为:
RMI > Httpinvoker >= Hessian >> Burlap >> web service
RMI不愧是JAVA的首选远程调用协议,非常高效稳定,特别是在大数据量的情况下,与其他通讯协议的差距尤为明显。
HttpInvoker使用java的序列化技术传输对象,与RMI在本质上是一致的。从效率上看,两者也相差无几,HttpInvoker与RMI的传输时间基本持平。
Hessian在传输少量对象时,比RMI还要快速高效,但传输数据结构复杂的对象或大量数据对象时,较RMI要慢20%左右。
Burlap仅在传输1条数据时速度尚可,通常情况下,它的毫时是RMI的3倍。
Web Service的效率低下是众所周知的,平均来看,Web Service的通讯毫时是RMI的10倍。
二、结果分析
1、直接调用
直接调用的所有毫时都接近0,这说明程序处理几乎没有花费时间,记录的全部时间都是远程调用耗费的。
2、RMI调用
与设想的一样,RMI理所当然是最快的,在几乎所有的情况下,它的毫时都是最少的。特别是在数据结构复杂,数据量大的情况下,与其他协议的差距尤为明显。
为了充分发挥RMI的性能,另外做了测试类,不使用Spring,用原始的RMI形式(继承UnicastRemoteObject对象)提供服务并远程调用,与Spring对POJO包装成的RMI进行效率比较。结果显示:两者基本持平,Spring提供的服务还稍快些。
初步认为,这是因为Spring的代理和缓存机制比较强大,节省了对象重新获取的时间。
3、Hessian调用
caucho公司的resin服务器号称是最快的服务器,在java领域有一定的知名度。Hessian做为resin的组成部分,其设计也非常精简高效,实际运行情况也证明了这一点。平均来看,Hessian较RMI要慢20%左右,但这只是在数据量特别大,数据结构很复杂的情况下才能体现出来,中等或少量数据时,Hessian并不比RMI慢。
Hessian的好处是精简高效,可以跨语言使用,而且协议规范公开,我们可以针对任意语言开发对其协议的实现。目前已有实现的语言有:java, c++, .net, python, ruby。还没有delphi的实现。
另外,Hessian与WEB服务器结合非常好,借助WEB服务器的成熟功能,在处理大量用户并发访问时会有很大优势,在资源分配,线程排队,异常处理等方面都可以由成熟的WEB服务器保证。而RMI本身并不提供多线程的服务器。而且,RMI需要开防火墙端口,Hessian不用。
4、Burlap调用
Burlap与Hessian都是caucho公司的开源产品,只不过Hessian采用二进制的方式,而Burlap采用xml的格式。
测试结果显示,Burlap在数据结构不复杂,数据量中等的情况下,效率还是可以接受的,但如果数据量大,效率会急剧下降。平均计算,Burlap的调用毫时是RMI的3倍。
我认为,其效率低有两方面的原因,一个是XML数据描述内容太多,同样的数据结构,其传输量要大很多;另一方面,众所周知,对xml的解析是比较费资源的,特别对于大数据量情况下更是如此。
5、HttpInvoker调用
HttpInvoker是SpringFramework提供的JAVA远程调用方法,使用java的序列化机制处理对象的传输。从测试结果看,其效率还是可以的,与RMI基本持平。
不过,它只能用于JAVA语言之间的通讯,而且,要求客户端和服务端都使用SPRING框架。
另外,HttpInvoker 并没有经过实践的检验,目前还没有找到应用该协议的项目。
6、web service调用
本次测试选用了apache的AXIS组件作为WEB SERVICE的实现,AXIS在WEB SERVICE领域相对成熟老牌。
为了仅测试数据传输和编码、解码的时间,客户端和服务端都使用了缓存,对象只需实例化一次。但是,测试结果显示,web service的效率还是要比其他通讯协议慢10倍。
如果考虑到多个引用指向同一对象的传输情况,web service要落后更多。因为RMI,Hessian等协议都可以传递引用,而web service有多少个引用,就要复制多少份对象实体。
Web service传输的冗余信息过多是其速度慢的原因之一,监控发现,同样的访问请求,描述相同的数据,web service返回的数据量是hessian协议的6.5倍。另外,WEB SERVICE的处理也很毫时,目前的xml解析器效率普遍不高,处理xml <-> bean很毫资源。从测试结果看,异地调用比本地调用要快,也从侧面说明了其毫时主要用在编码和解码xml文件上。这比冗余信息更为严重,冗余信息占用的只是网络带宽,而每次调用的资源耗费直接影响到服务器的负载能力。(MS的工程师曾说过,用WEB SERVICE不能负载100个以上的并发用户。)
测试过程中还发现,web service编码不甚方便,对非基本类型需要逐个注册序列化和反序列化类,很麻烦,生成stub更累,不如spring + RMI/hessian处理那么流畅简洁。而且,web service不支持集合类型,只能用数组,不方便。
发表评论
-
答复: 再谈一个关于final的不一致编译的低级错误
2012-09-25 09:13 1089tlde_ti 写道 我是觉得连依赖管理工具都不用的项目实在 ... -
[MAVEN]web工程的调试
2011-12-18 21:48 4117接上篇:[MAVEN]maven最佳实践 mav ... -
[jetty]jetty学习
2011-12-27 16:19 2557Jetty源码学习 图源码:jetty.dia ... -
[jetty]start.jar启动
2011-12-27 16:16 2755概图 关键点 org.eclipse.jetty ... -
在java中怎样执行系统命令?
2011-12-05 00:12 0linux比较容易实现,windows下问题千奇百怪。 ... -
[MAVEN]maven最佳实践
2011-12-06 11:00 2242参考资料: 官方:http://maven.ap ... -
java点滴
2011-11-25 00:18 0main静态方法调用: 意思的在method ... -
[java]synchronized我的理解
2011-11-18 21:56 1823多线程、同步、锁,搞 ... -
tomcat攻略
2011-07-23 10:51 6892以下是常见的tomcat配置和问题 以下总结来自实践(OS: ... -
[web工程]Struts2+Spring3.1+Hibernate3.6的集成
2011-05-20 00:32 2025背景:如果选择struts2+Spring+Hibernate ... -
[web工程]集成struts2 mvc
2011-05-20 00:30 2170返回:[web工程]Struts2+Spring3 ... -
[web工程]集成hibernate
2011-05-20 00:28 1476返回:[web工程]Struts2+Spring3.1+ ... -
[web工程]创建web工程
2011-05-19 21:30 1968返回:[web工程]Struts2+Spring3.1+Hib ... -
[分享][Hibernate]公用DAO
2011-05-15 23:27 1977通过Hibernate的元信息处理组件等等,利用spring封 ... -
[经验][hibernate][自定义类型]hibernate 3.6.3中自定义类型,json类型
2011-05-14 12:05 1458首先感谢您百忙之中的阅读 :) 下面进入正题 在3. ... -
hibernate和jdbc加载对象性能
2011-05-03 21:49 1989skzr.org 写道 core2 P8400 ... -
svn经验
2011-03-30 12:55 1435一下内容摘录自自己的wiki,所以链接可能有问题! 目录 ... -
完善包注释[javadoc package-info.java]
2011-03-27 14:03 6482包级注释 说明: 包级注释,有时候是非常有用的,可以清晰的 ... -
Tomcat7新特性?cookie HttpOnly的那些事(sessionid获取麻烦了)
2011-03-26 10:46 13218环境: tomcat6和tomcat7, ... -
weblogic部署应用
2011-02-16 19:59 1183weblogic部署应用 weblogic 1 怎样 ...
相关推荐
Java远程调用批处理文件是将Java编程与批处理脚本结合的一种技术,它允许Java程序执行在远程服务器上的批处理任务,而无需人工干预。这通常涉及到网络通信和进程间交互,使得分布式系统能够更加灵活地管理和调度任务...
总之,Java接口远程调用涉及到网络编程的基本原理,包括HTTP协议、请求与响应处理、错误处理等。在实际应用中,为了提高代码复用性和可维护性,通常会将这些功能封装到服务类中,如示例中的`...
Java远程调用工具是开发过程中不可或缺的利器,尤其在处理分布式系统和服务之间的交互时。本文将深入探讨如何利用Java技术进行远程调用,特别是针对WebService和RESTful接口的调用,以及一个常用的工具——SoapUI。 ...
**标题解析:** "java调用snmp协议" 指的是使用Java编程语言来实现对SNMP(简单网络管理协议)的调用。SNMP主要用于监控和管理网络设备,如路由器、交换机等,而Java作为一种跨平台的编程语言,能够方便地实现这种...
自由协议则是指在没有预定义的通信协议下,开发者根据实际需求自行设计的数据交换格式。 在"java实现485自由协议通讯"的项目中,开发者已经创建了一个Java程序,可以实现通过RS-485接口进行自定义协议的数据传输。...
`properJavaRDP`是一个用Java编写的远程桌面协议(RDP)客户端,它提供了对Windows远程桌面服务的访问支持。此项目旨在提供一个稳定且可扩展的平台,以便开发者能够在Java应用程序或Web应用中集成远程桌面功能。 ...
本文将深入探讨如何使用Java来实现基于SOAP的XML文档网络传输以及远程过程调用(RPC)。这是一项关键的技术,它允许不同系统间的无缝交互,即使这些系统采用不同的编程语言和平台。 SOAP是一种基于XML的协议,主要...
标题中的“Flex与Java交互 远程调用方式”指的是在Adobe Flex应用程序中与Java后端进行通信的技术。Flex是一种基于ActionScript的开源框架,用于构建富互联网应用程序(RIA),而Java是后端开发的常用语言。两者之间...
总的来说,Java远程调用Shell脚本客户端包简化了开发人员在Java应用程序中集成远程系统管理操作的过程,提高了开发效率并保证了安全性。通过理解和运用上述技术,开发者能够更好地利用这个工具包实现各种复杂的远程...
RMI基于JRMP(Java Remote Messaging Protocol)协议进行通信,这是一种专门为Java远程对象设计的协议,确保了跨平台的兼容性,只要目标系统支持JRE(Java Runtime Environment),RMI应用就能在其中正常运行。...
RMI使用Java语言接口定义了远程对象,并集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。RMI使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用。 RMI的优点: * ...
Java远程调用(Java Remote Method Invocation,简称RMI)是Java平台提供的一种强大的技术,用于在不同的Java虚拟机之间进行对象方法的调用。通过RMI,开发者可以在网络环境中实现分布式计算,使得客户端应用程序...
- **高性能**:RMI利用了高效的网络通信协议,如TCP/IP,提高了性能。 #### 四、RMI的应用案例 为了更好地理解RMI的工作原理,可以通过一个简单的示例来进行说明。假设我们有一个远程服务器,该服务器提供了一些...
Java程序调用.NET/C#的Web服务是一种跨平台的交互方式,主要依赖于SOAP(Simple Object Access Protocol)协议,使得不同编程语言开发的应用程序能够相互通信。在本场景中,用户已经提供了一个.NET的Web服务,而我们...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间透明地调用对象的方法。在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象...
Java调用SOAP(Simple Object Access Protocol)接口是Web服务交互中的常见操作,SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。本案例主要关注如何使用Java来实现SOAP请求并获取响应,具体我们...
远程调用服务框架是软件开发中的一个重要组成部分,它允许不同系统、不同网络环境下的应用程序之间进行通信,实现功能的解耦合和分布式系统的构建。在Java世界中,Spring框架提供了强大的支持来实现这一目标。本篇...
3. **网络通信**:在Java中,我们可以使用Socket编程或者HTTP协议来实现网络通信。Socket提供了低级别的网络通信接口,而HTTP更易于理解和使用,且支持更多功能,如错误处理和身份验证。 4. **服务注册与发现**:...
Java远程通讯技术是构建分布式系统的关键组成部分,它允许不同的计算机之间进行数据交换和功能调用。本文将深入探讨Java中的一些主要远程通讯技术,包括它们的基本原理、应用级协议以及具体的技术实现。 首先,理解...
远程调用是指应用程序的不同组件或服务之间,通过网络进行通信的一种方式。Spring支持多种远程调用协议,如RMI(Remote Method Invocation)、Hessian、 Burlap以及HTTP Invoker等。这些协议允许我们跨越网络边界,...