原文地址:http://hi.baidu.com/qianjian21/item/2f712dd4c1e81cbb33db90b1

总体性能比较:
Socket(BIO/NIO)>RMI>HTTPInvoker>=Hessian>REST>>Burlap>EJB>>Web Service

1.socket

如 果协议设计的比较好,Socket性能毫无疑问是最高,同时灵活性和复杂度也最高,如果采用高效的网络框架如:Mina、Netty等可以降低开发复杂 度,一般在对性能有非常苛刻的条件下使用。

2.RMI

RMI的性能相对略低,但是与Socket还在同1个数量级,同时只能在Java系统间通信,如果是基于互联网使用,还存在穿越防火墙的问题。采用 Spring封装的方式使用比原始RMI方式性能略高,主要原因是:Spring采用了代理和缓存机制,节省了对象重新获取的时间。

3.HTTPInvoker

HTTPInvoker是Spring特有的,只能在客户端和服务器端都采用Spring框架下使用,与RMI本质相同,使用java的序列化技术传输对 象,两者性能差别较小。

4.Hessian

Hessian在数据量较小时性能表现出众,甚至比RMI还高,在数据结构复杂的对象或者大量数据对象时,较RMI要慢20%左右;

Hessian的优点 是精简高效,同时可以跨语言使用,目前支持Java,C++, .net, python, ruby等语言。

另外Hessian可以充分利用web容器的成熟功能,在处理大量用户访问时很有优势,在资源分配、线程排队、异常处理等方面都可以由 web容器保证,而RMI本身不提供多线程的服务器。

5.REST

REST架构也是一种比较简单、高效的Web服务架构,相对于Hessian性能略低,但还在同一个数量级,同时也是基于HTTP协议,目前也有比较多的 成功案例。

6.Burlap

Burlap在数据量非常小时性能尚可,同时性能随着数据量的增加急剧降低,通常性能耗时是RMI的3倍左右,主要原因是:Hessian采用二进制传输 数据,而Burlap采用XML格式,而XML描述内容太多,同样的结构,其传输量要大很多,同时,XML的解析是比较耗资源的,尤其大数据量情况下更是 如此。

7.EJB

EJB基于RMI协议,性能不高,同时只能在Java系统内使用,不能跨语言,目前使用越来越少,目前阿里巴巴内部已经完全放弃EJB。

8.Web Service

在这些远程调用协议中,Web Service的性能是最低的,一般情况下,Web Service的性能相对于Hessian性能要慢10~20倍左右,同时,对于同样的访问请求,Web Service的传输数据量约为Hessian的6倍左右,对网络带宽消耗非常大,同时XML的解码器普遍性能不高,XML<->Java Bean的编码、解码非常耗费资源,对于并发和负载比较高的网站不是一个好的选择。同时,Web Service的使用也不太方便。

总结:Hessian和REST架构个人认为是比较优秀的高性能通信协议,如果对性能要求特别苛刻可以直接采用Socket方式,目前,阿里巴巴内部的远程调用主要采用Hessian和Dubbo(基于Mina框架),经受了苛刻的高并发、高负载考验。

主要几种协议远程调用消耗大致时间(小数据量):
Socket/RMI/Hessian: 0.5ms
REST:0.7ms
Web Service(Axis): 约10ms,其中如果采用wsdl2java的方式,效率更低些。

Socket/RMI/Hessian/REST之间选择还需要在传输数据量,性能要求等各方面考量,合适的场景选择合适的协议

转载于:https://www.cnblogs.com/davidwang456/archive/2013/04/02/2995420.html

主要几种通信协议的性能比较(转载)相关推荐

  1. ArcEngine数据删除几种方法和性能比较

    转自原文 ArcEngine数据删除几种方法和性能比较 一.  几种删除方法代码 1.  查询结果中删除 private void Delete1(IFeatureClass PFeatureclas ...

  2. Linux五种IO模型性能分析

    转载:http://blog.csdn.net/jay900323/article/details/18141217     Linux五种IO模型性能分析 目录(?)[-] 概念理解 Linux下的 ...

  3. Windows五种IO模型性能分析和Linux五种IO模型性能分析

    Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...

  4. PHP生成随机密码的4种方法及性能对比

    PHP生成随机密码的4种方法及性能对比 http://www.php100.com/html/it/biancheng/2015/0422/8926.html 来源:露兜博客   时间:2015-04 ...

  5. YONEX羽毛球线性能参数(转载)

    YONEX羽毛球线性能参数(转载) BG-65:0.70毫米的线径,线芯材料为多层树脂,外层材料为化学合成树脂编束纤维,弹性较好,耐磨性及经济性极佳,历来销量最大,深受羽球高手好评. 颜色有:白(Wh ...

  6. 性能压测服务器502报错,一种交易系统的性能测试方法及相关服务器

    1. 一种交易系统的性能测试方法,其特征在于,包括: 性能测试服务器发送N条性能测试交易至应用服务器,其中N>0; 所述性能测试服务器接收所述应用服务器发送的监测报告,所述监测报告为所述应用 服 ...

  7. java equals 判断空_Java 判断字符串是否为空的三种方法与性能分析

    [java中判断字符串是否为数字的三种方法  1>用JAVA自带的函数 public static boolean isNumeric(String str){   for (int i = s ...

  8. HashMap 的 7 种遍历方式+性能分析!

    随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历方法讲起,然后再从性能. ...

  9. mysql实现了四种通信协议_Mysql通信协议-阿里云开发者社区

    Mysql四种通信协议(linux下本地连接的都是socket 其他都是tcp) 当连接mysql时,使用-h127.0.0.1时,linux与unix下的连接协议为socket协议,windows下 ...

最新文章

  1. 多人部件解析--Towards Real World Human Parsing: Multiple-Human Parsing in the Wild
  2. 计算机电路逻辑分析基础知识答案,计算机电路基础学习指导与习题解答
  3. 【深度学习的数学】绘制2×3×1层带sigmoid激活函数的神经网络感知机输出函数的三维图像(神经网络参数使用正态分布随机数)
  4. nginx 缓存配置及报错解决
  5. php分目录存放session,phpsession实现多级目录存放实现代码,phpsession_PHP教程
  6. 使用 保存文件_使用SaveFileDialog调用保存文件对话框
  7. 并查集——最小连接路径和Kruskal(hdu1301)
  8. 自考的那些事儿(二):第二次自考完了???
  9. Sicily/1927. Conflict
  10. 解读2015之大数据篇:大数据的黄金时代
  11. 三星s8 android版本,三星S8+官方国行版安卓9完整固件系统升级包:CHC-G9550ZCU3DSF2...
  12. 怎么将CAD图纸转化为PDF格式呢?教你两个妙招搞定!
  13. Java对象的生与死
  14. 英伟达最新驱动打开3d vision功能
  15. 如何手动开启Windows远程桌面服务
  16. 按键拨号声音 DTMF MATLAB程序样例
  17. 在计算机网络术语中wan的中文意思是什么,在计算机网络术语中,WAN的中文含义是...
  18. python3 进程池Pool 详解
  19. 两个栈共享一块存储空间新解
  20. 无人机坐标系定义与转换

热门文章

  1. linux vnc的小黑点和鼠标不同步_vnc连接windows,推荐三款非常好用的vnc连接windows软件...
  2. python获取列表中元素的索引
  3. pandas的str函数的一些功能
  4. Qt中的图像处理与绘制
  5. 公务员要过英语六级吗计算机,报考2020年国家公务员考试,必须要过英语四六级吗?...
  6. 江计算机科学与技术,计算机科学与技术
  7. linux 下 c++ clock 函数理解
  8. pyspark dataframe基本用法
  9. keras cnn 代码详解
  10. android studio串号,AndroidStudio使用常见问题集锦