`

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

相关推荐

    北斗2.1通信协议

    1. **增强的数据传输速率**:北斗2.1通信协议通过采用更高效的数据压缩算法以及优化的数据包结构设计,提高了数据传输效率,使得数据传输速度得到了显著提升。 2. **改善的抗干扰能力**:通过对通信协议中的纠错机制...

    软件工程java 基于通信协议

    在软件工程领域,Java 和 C++ 语言常常被用于构建复杂的系统,特别是在...通过这个实验,学生将深入理解网络通信的核心原理,并掌握在Java和C++中实现通信协议的技能,这对他们的软件工程职业生涯来说是极其宝贵的。

    java通信学习-协议与加密

    本篇文章将聚焦于“协议与加密”这两个核心概念,它们是Java通信中的基石。以下是对这两个主题的详细阐述: **协议** 在计算机网络中,协议是指两台或多台计算机进行通信时遵循的一系列规则或约定。这些规则定义了...

    java socket通信自定义消息协议

    总的来说,Java Socket通信自定义消息协议涉及网络编程基础、数据结构设计以及异常处理等多方面知识。通过这个过程,我们可以灵活地构建满足特定需求的通信系统,实现客户端和服务器间的高效交互。

    java实现CMPP协议

    CMPP协议主要用于短信中心(SMSC)与短信网关之间的通信,支持大量并发的短信发送和接收操作,是移动运营商内部的重要通信协议。本文将详细介绍Java实现CMPP协议的相关知识点。 首先,CMPP协议主要由一系列的命令...

    使用java实现Xmodem协议

    9. **性能优化**:虽然Xmodem协议效率较低,但可以通过优化数据处理流程、减少不必要的I/O操作等方式提高整体性能。 10. **调试与测试**:开发完成后,需要对协议的实现进行充分的测试,确保在各种情况下都能正确...

    flex与java通信

    综上所述,Flex与Java的通信涉及到多个层面的技术,包括前端UI的构建、后端服务的实现、通信协议的选择以及安全性的考虑。理解和掌握这些知识点对于开发高效、稳定的Flex与Java集成应用至关重要。

    Xmodem和Ymodem 传输协议JAVA实现

    在IT领域,Xmodem和Ymodem是两种早期的文件传输协议,主要用于串行通信。这些协议在个人计算机发展的初期扮演了重要角色,尤其是在低带宽和不...在Java中实现这些协议,可以提升编程技能,增强对通信协议的深入认识。

    Java 解析国标hj212协议

    协议通常包括数据结构、数据编码、通信协议等部分,目的是确保不同设备和系统间的数据交换准确无误。 2. **Java编程语言**:Java是一种广泛使用的面向对象的编程语言,具备跨平台性、安全性强、稳定性高等特点,...

    环保212协议解析java

    9. **库的使用**:在Java中可能存在第三方库用于简化XML解析和网络通信,如Apache HttpClient、Jackson或Woodstox,理解如何利用这些库可以提高开发效率。 10. **性能优化**:对于大量数据的处理,要考虑解析性能,...

    34_dubbo都支持哪些通信协议以及序列化协议?.zip

    5. **Protobuf-Netty**:Google的Protocol Buffers结合Netty实现的通信协议,具有高效率和跨语言特性。 6. **Webservice (SOAP)**:基于XML的Web服务协议,虽然性能较低,但具有很好的兼容性和标准性,适合对外提供...

    基于java的视频通信

    每个视频通话会话可能需要一个独立的线程来处理,确保不同用户间的通信互不干扰,同时保证系统的响应速度和效率。 4. **音视频编解码**:视频通信的核心在于音视频数据的编码、传输和解码。开发者需要了解如H.264、...

    java实现rtsp/rtmp转m3u8/flv/hls/mp4等实现web直播和回放测

    Java 实现 RTSP/RTMP 转 M3U8/FLV/HLS/MP4 等技术在Web直播和回放中的应用是现代互联网流媒体服务的关键组成部分。RTSP(Real-Time Streaming Protocol)和RTMP(Real-Time Messaging Protocol)主要用于实时视频...

    JAVA WEB即时通信

    Java Web即时通信(Java Web Instant Messaging)是一种技术,允许用户在Web应用中实现实时的信息交换,例如在线聊天、消息推送等。这种技术基于Java语言和Web开发框架,结合了WebSocket、Servlet、AJAX等技术,以...

    java通过netconf协议 操作华为、h3c交换机可实现增删静态路由条目等功能

    总的来说,Java通过Netconf协议与华为、H3C交换机交互,实现了网络配置的自动化,极大地提高了运维效率,减少了人为错误。而提供的压缩包文件`netconf`应该包含了一个完整的Java实现示例,可以直接运行以测试和验证...

    JAVA TCP和UDP Socket通信框架

    Java中的TCP和UDP Socket通信是网络编程的基础,用于在不同设备之间建立可靠的数据传输通道。TCP(Transmission Control Protocol)提供的是面向连接、有序且无损的服务,而UDP(User Datagram Protocol)则是无连接...

    Java 下 简单 实现 tr069 协议

    TR069(Technical Requirements for CPE WAN Management Protocol)是一种通信协议,主要用于远程管理和服务提供设备,如家庭网关、DSL调制解调器等。它由DSL论坛(现为 Broadband Forum)制定,旨在提高服务提供商...

    java网络即时通信系统

    这种系统通常采用客户端-服务器架构,能够支持多种通信协议,如TCP/IP、HTTP、WebSocket等,以实现不同设备之间的消息传递。本文将深入探讨Java在网络即时通信系统中的应用以及相关技术。 一、Java基础 Java作为一...

    基于Java的USB-HID设备通信设计与实现.pdf

    这极大地简化了Java开发人员在Windows平台上与USB-HID设备通信的难度,提高了开发效率。 本篇论文由北京工业职业技术学院电气与信息工程学院的杨民峰撰写,基金项目为2015年北京工业职业技术学院科研课题(BGZYKY...

    Java串口通信操作的jar包

    Rxtx是一个开源的Java库,专门用于实现串行通信,它为Java提供了串口(Serial Port)操作的能力,使得开发者无需深入理解底层通信协议,就能方便地进行串口编程。 Rxtx库支持多种操作系统,包括Windows、Linux、Mac...

Global site tag (gtag.js) - Google Analytics