`

Java常用的通信协议效率比较(转)

    博客分类:
  • java
阅读更多
本文比较了RMI,Hessian,Burlap,Httpinvoker,Web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能。
1. 简介
RMI是java语言本身提供的远程通讯协议,稳定高效,是EJB的基础。但它只能用于JAVA程序之间的通讯。
HessianBurlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防火墙端口。协议的规范公开,可以用于任意语言。
Httpinvoker是SpringFramework提供的远程通讯协议,只能用于JAVA程序间的通讯,且服务端和客户端必须使用SpringFramework。
Web service是连接异构系统或异构语言的首选协议,它使用SOAP形式通讯,可以用于任何语言,目前的许多开发工具对其的支持也很好。
2. 测试结果
测试结果显示,几种协议的通讯效率依次为:
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倍。
3. 结果分析
1、直接调用
直接调用的所有毫时都接近0,这说明程序处理几乎没有花费时间,记录的全部时间都是远程调用耗费的。

2、RMI调用
与设想的一样,RMI理所当然是最快的,在几乎所有的情况下,它的耗时都是最少的。特别是在数据结构复杂,数据量大的情况下,与其他协议的差距尤为明显。

3、Hessian调用
caucho公司的resin服务器号称是最快的服务器,在java领域有一定的知名度。Hessian做为resin的组成部分,其设计也非常精简高效,实际运行情况也证明了这一点。平均来看,Hessian较RMI要慢20%左右,但这只是在数据量特别大,数据结构很复杂的情况下才能体现出 来,中等或少量数据时,Hessian并不比RMI慢。

Hessian的好处是精简高效,可以跨语言使用,而且协议规范公开,我们可以针对任意语言开发对其协议的实现。目前已有实现的语言有:java, c++, .net, python, ruby。

另外,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文件上。这比冗余信息更为严重,冗余信息占用的 只是网络带宽,而每次调用的资源耗费直接影响到服务器的负载能力。
分享到:
评论

相关推荐

    grpc、zmq通信效率测试demo

    grpc、zmq通信效率测试demo

    JAVA网络通信系统的研究与开发源代码

    该系统基于客户端和服务端之间的互联,提供了一系列的客户端和服务端间的通信方式,包括TCP协议,UDP协议,并通过自定义通信协议,实现客户端和服务端之间的数据传输和处理。该系统可用于多种领域,包括游戏、即时...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...

    JAVA面试题最全集

    5.Java中的分页、效率考虑。 6.简单介绍您所了解的structs。 1.xml在项目中的作用 2.s-EJB 与 e-EJB的区别 3.会话面的作用 4.cmp与bmp的优缺点 5.j2me程序的必需的几个部分 6.c/s与b/s的区别 7.构建一...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...

    java各知识点详细总结.docx

    Java基础语法:Java是一种面向对象编程语言,它支持类、对象、继承、多态等概念。Java语法包括变量、数据类型、运算符、控制...Java中的网络编程可以通过Java Socket API来实现,可以进行TCP、UDP等协议的网络通信。

    java 面试题 总结

    从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。 9、...

    java SECS管理系统 SECS 客户端(Passive) 管理系统 springboot SECS快速开发平台 源代码

    标准化兼容性:SECS/GEM是半导体行业广泛接受的标准通信协议,从而简化集成过程并降低系统复杂性。 设备控制与监控:通过支持SECS协议的软件,企业可以实时地控制和监控生产设备的状态和参数,调整工艺流程,提高...

    java_jsp项目源码_Java聊天室程序(java)130226.rar

    Java聊天室程序是一个基于Java技术的在线实时通信平台,允许用户在不同的设备上实时发送和接收消息。本程序采用JSP、Servlet、JDBC等技术进行开发,具备良好的可扩展性和可定制性,可以根据实际需求进行二次开发。 ...

    JAVA文件传输的实现.rar

    Socket编程:利用Java的Socket API实现客户端和服务器之间的通信,建立TCP连接进行数据传输。 文件流操作:使用Java的文件输入输出流(FileInputStream、FileOutputStream)读取和写入文件内容。 多线程处理:通过多...

    java网络编程技术课程设计.doc

    TCP网络通信程序设计与实现 摘要: 目前,基于TCP/IP协议的网络得到了普及和飞速的发展,Windows下的网络程序越来越 显得重要。利用TCP/IP协议提供的编程接口———Socket(套接字)可以开发出TCP/IP应用程 序。正确的...

    一种基于Java企业内部及时通讯软件设计.doc

    该通信器的通信协议 中采用了确认与重传机制来保证数据传输的可靠性,采用了动态的超时重传定时器值提 高了本协议的适应性和灵活性,还使用了在应用层对数据进行分片的方法来避免IP层分 片的低效率[2]。 (3) 在本...

    mica-mqtt 低延迟高性能的 mqtt 物联网组件 java mqtt broker 服务

    我们的 Java MQTT 客户端组件具有以下特点:- 支持异步非阻塞IO,提高消息传输效率 - 提供简单易用的API接口,方便开发者快速集成和使用- 低延迟设计,确保消息传输的实时性- 高性能设计,支持百万级连接并发同时,...

    2021互联网大厂Java架构师面试题突击视频教程

    34_dubbo都支持哪些通信协议以及序列化协议? 35_dubbo支持哪些负载均衡、高可用以及动态代理的策略? 36_SPI是啥思想?dubbo的SPI机制是怎么玩儿的? 37_基于dubbo如何做服务治理、服务降级以及重试? 38_分布式...

    tentacle远程桌面是基于Java canvas的跨平台远程桌面实现,.rar

    WebSocket是一种网络通信协议,RFC6455定义了它的通信标准 WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议 HTTP协议是一种无状态的,无连接的,单向的应用层协议。 它采用了请求/响应模式,...

    java大作业设计报告-JAVA聊天室.doc

    " "求 " 服务器中涉及到的类图如下所示: 2 协议约定及实现 由于要考虑客户端的各个请求需要完成不同的操作,需要根据数据来内容来做特定的 工作,本聊天室将通信协议定义如下: userID:服务器通过此ID确定消息是由...

    基于Java的远程视频会议系统(系统+论文).rar

    此外,系统采用了先进的编解码技术和网络协议,优化了数据传输效率,降低了延迟,确保了音视频通信的清晰度和流畅性。安全性也是该系统的一个重点,它提供了加密通信和身份验证机制,保障了会议内容的私密性和数据的...

    超级有影响力霸气的Java面试题大全文档

    从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。 12、...

    基于Java的小区住户管理系统的设计与实现【附源码】

    本设计主要实现集人性化、高效率、便捷等优点于一身的小区住户管理系统,完成业主管理、通知公告管理、业主车辆管理、出行管理、监控管理、维修申报管理、协议签署管理、投诉信箱管理、数据备份等功能模块。...

    串口监视软件

    CommMonitor 能侦听、拦截、记录、分析串行通信协议,让您对应用程序操作串行端口的过程和细节,让您及时的模拟被侦听程序或设备的数据、控制流,提高工作效率。 二次开发接口DEMO 详细调用方法请参看: Demo\ ...

Global site tag (gtag.js) - Google Analytics