`

几种通讯协议的比较(转载)

    博客分类:
  • JAVA
阅读更多

转自http://dalezhu.iteye.com/blog/190962

 

一、综述
本文比较了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不支持集合类型,只能用数组,不方便。
分享到:
评论

相关推荐

    转载无线通信--A接口概述

    根据给定文件的信息,本文将深入探讨A接口的相关知识点,主要围绕标题“转载无线通信—A接口概述”以及描述中的“非常不错的英文资料,帮助您了解A接口的概念”来进行。 ### A接口概述 #### 一、A接口的概念 在...

    转载VLAN学习手册

    常见的VLAN间通信方法有以下几种: 1. **单臂路由(Router-on-a-Stick)**:在单个物理接口上启用多个VLAN,通过子接口实现不同VLAN间的通信。 2. **VLAN间路由**:在三层交换机上启用路由功能,直接处理不同VLAN的...

    串口通信编程大全COM

    串口通信编程是一种在计算机和外部设备之间进行数据交换的技术,尤其在嵌入式系统、工业控制、仪器仪表等领域广泛应用。"串口通信编程大全COM"这个资源可能包含全面的串口通信编程技术和实例,旨在帮助开发者深入...

    lan9252与stm32的EtherCAT从站实现,ethercat主站代码stm32,C,C++

    EtherCAT(Ethernet for Control Automation Technology)是一种实时工业以太网通信协议,被广泛应用于自动化设备和系统的高速数据传输。在本项目中,我们将探讨如何利用STM32微控制器和LAN9252 EtherCAT从站控制器...

    超声波测距51C程序_超声波测距51C程序转载_

    5. **通信接口**:为了让测距结果能够与其他设备交互,51C程序通常会设计兼容标准串行通信协议(如UART)的接口,方便数据传输。这样,测距数据可以实时发送到显示设备或者嵌入到更复杂的控制系统中。 6. **程序...

    Fuji UG20系列POD用户手册(Ethernet通信篇).pdf

    模块支持UDP/IP通信协议,可以通过网络将存储在POD或其上层的PLC(可编程逻辑控制器)中的数据进行传送。 3. EthernetI/F模块的安装和配线 手册详细说明了如何安装EthernetI/F模块,以及如何进行相关的配线操作。...

    Tomcat 7-9转载资源

    - **Servlet 3.1** 支持:增加了WebSocket API,允许双向通信,增强了HTTP/2协议支持。 - **改进的安全性**:增强了安全管理器,支持更精细的权限控制。 - **更好的可管理性**:通过JMX(Java Management ...

    socket_套接字_

    套接字通信基于TCP/IP协议族,分为TCP(传输控制协议)和UDP(用户数据报协议)两种类型。TCP提供面向连接的、可靠的字节流服务,而UDP则提供无连接的、不可靠的数据包服务。在本例中,我们通常选择TCP套接字,因为...

    [软件][转载]关闭QQ的各种弹窗,支持自定义.

    通常,开发者会通过逆向工程解析QQ的通信协议,找出发送和接收弹窗指令的部分,然后编写拦截或屏蔽这些指令的代码,以此达到关闭弹窗的目的。 关闭弹窗的源码可能包括以下几个步骤: 1. 分析QQ客户端的数据包,识别...

    MMATDCP011A-设置手册.pdf

    首先,MECHATROLINK-II是一种现场网络通讯协议,专门用于自动化设备的控制。其核心特点是一台FA(Factory Automation)控制器可以控制多个FA装置,包括伺服电机、变频器和输入输出模块等。该协议简化了设备的控制...

    sso详细设计说明书(下篇)转载(海纳百川文章http://www.cnblogs.com/David-weihw/a)

    在实际设计中,SSO系统可能会采用以下几种常见方案: - **基于Cookie的SSO**:利用Cookie在各个应用之间传递认证信息,但需考虑跨域问题和安全性。 - **JWT(JSON Web Tokens)**:一种轻量级的身份验证机制,通过...

    winsocket 全双工

    "WinSocket-TCP"可能是另一份文档,专注于WinSocket下的TCP(传输控制协议)编程,TCP是一种面向连接、可靠的传输协议,常用于全双工通信。 在WinSocket编程中,TCP提供了全双工的数据流,通过三次握手建立连接,...

    WebService+Android

    WebService是一种基于XML的协议,它定义了一种松散耦合的方式,使得运行在不同操作系统、不同硬件、不同编程语言环境的应用程序能够互相通信。SOAP是一种用于交换结构化和类型化的信息的协议,而REST则是一种轻量级...

    套接字编程学习套接字编程学习

    我们将使用TCP协议,这是一种面向连接、可靠的传输协议,适合需要保证数据完整性的应用场景。 首先,我们需要初始化套接字环境。这通常通过调用`WSAStartup`函数来完成,该函数接受一个版本号(在这里是MAKEWORD(2,...

    Java程序员面试的试题集(1_122)帮助初学者的技术问题(转载)

    3. **ORB协议**:ORB(Object Request Broker)充当应用程序间的中介,负责处理对象请求并进行响应,实现了不同系统间对象的透明交互。 CORBA的引入极大地简化了分布式计算环境中组件之间的交互,尤其在企业级应用...

    HY462x_Application Notes_TC_Preliminary V3.0.pdf

    该系列IC具备多项性能特点,支持高点数的触控,并且可以通过IIC(Inter-Integrated Circuit)通信协议与主机设备进行通信。以下是对HY462x系列IC应用说明文档中提及知识点的详细介绍。 1. 概述 文档主要介绍了HY462...

Global site tag (gtag.js) - Google Analytics