一、引言

实现跨平台通信的协议主要有简单对象訪问协议(Simple Object Access Protocol,SOAP)、代表性状态传输(Representational State Transfer,REST)以及 XML 远程过程调用协议(XML Remote
Procedure Call,XML-RPC)等。

二、为什么选择 XML-RPC?

集成 C/C++ 的挑战能够通过多种方式加以解决。C/C++ 代码集成的典型方法包含通过公共对象请求代理体系结构(Common
Object Request Broker Architecture,CORBA)、分布式组件对象模型(Distributed Component Object Model,DCOM)、远程方法调用(Remote Method Invocation,RMI)Internet ORB互联协议(Internet Inter-ORB Protocol,IIOP)以及 Java™ 本机接口(Java™ Native Interface,JNI)等进行集成。

图 1 显示了利用现有 C++ 代码集成(使用上面提到的典型方法)的採用不同编程语言(Java、VC++、PL/1)开发的三个不同应用程序。

图 1. 没有 XML-RPC 的当前方案

正如您看到的,C++ 代码应为每一个 RMI/IIOP/JNI、CORBA 和 DCOM client集成技术公开对应的接口。这就要求进行三次开发工作,显然会使部署和管理此类复杂接口的过程变得更为困难和麻烦。

在这些情况下,XML-RPC 是一个更好的选择,由于它可能帮助简化开发、部署和管理工作。

关于 XML-RPC 和 REST

XML-RPC 是 UserLand Software 的 Dave Winer 于 1998 年提出的。请訪问 Dave
Winer 的博客
,以了解他关于 XML-RPC 的最初想法。

REST 最初是由 Roy Thomas Fielding 作为其在加州大学尔湾分校的博士论文的一部分提出的。

图 2. 使用 XML-RPC

图 2 显示了怎样使用 XML over HTTP 通过远程过程调用来调用 C++ 程序。SOAP 和 REST 等备选技术也能用于同样的目的。只是,您将在下一部分中了解到,这些技术之间存在一些关键差别。

三、SOAP、XML-RPC 及 REST 间的对照

虽然这三个协议都支持 XML-RPC over HTTP,但就 C++ 而言,它们彼此之间是有差别的。表 1 提供了这些协议的各个元素间具体的比較。

表 1. SOAP、XML-RPC 及 REST 间的对照
  SOAP XML-RPC REST
定义 SOAP 是用于在分散的分布式环境中进行信息交换的轻量级协议。该协议基于 XML,包含三个部分:信封、一组编码规则以及用于表示远程过程调用和响应的约定。 这是使用 HTTP 作为传输协议和使用 XML 作为编码方式的远程过程调用。XML-RPC 的设计力求简单,并同一时候同意传输、处理和返回复杂数据结构。 代表性状态传输旨在反映设计良好的 Web 应用程序的行为图像:由网页组成的网络,当中用户通过选择链接继续进行使用,选择链接将导致将下一页传输给用户并进行呈现,以供其使用。
目标 SOAP 可实现用户定义的数据类型,提供指定接收者的功能、消息特定的处理控制以及其它功能,从而对 XML-RPC 进行了扩展。 很简单且条理清楚的可扩展格式。HTML 编码人员应该可以查看包括 XML-RPC 过程调用的文件,理解其进行的工作,并可以对其进行改动,仅仅需一两次尝试就能使其正常工作。此协议很easy实现,可以高速对其进行调整,以在其它环境或其它操作系统上执行。 创建 REST 的目的是为了提供有关 Web 应该怎样执行的设计模式,并作为 Web 标准和设计 Web 服务的指导框架。
支持的数据类型 整数、Boolean、ASCII 字符串、双精度带符号浮点数、日期时间、结构、数组、字节数组、枚举、用户定义数据类型、多态訪问器 整数、Boolean、ASCII 字符串、双精度带符号浮点数、日期时间、结构、数组。 特定于实现。通常支持的类型有整数、Boolean、ASCII 字符串、双精度带符号浮点数、日期时间、集合、列表、属性。
简单性 比 XML-RPC 稍微复杂 易于理解和进行开发 特定于实现
稳定性 W3C 接受的标准 不是标准 体系结构參考。不须要标准
互操作性 无法与 REST/XML-RPC 互操作 无法与 REST/SOAP 互操作 无法与 SOAP/XML-RPC 互操作
工具 非常多主要公司(包含 IBM 和 Microsoft)均已開始在其工具中支持 SOAP。 工具仍在开发中。 并没有非常多工具支持。
自己定义能力 高度可自己定义,不受数据类型和协议限制 轻量级,仅仅能在 HTTP 上工作,具有有限的数据类型支持 仅仅能在 HTTP 上工作
有非常多开放源码库可用。 有非常多开放源码库可用。将在以下的部分进行说明 并没有非常多实现库可用

注:以上參考IBM。

轻量级跨平台消息传递协议XML-RPC深度解析的更多相关文章

  1. 网络协议 20 - RPC 协议(上)- 基于XML的SOAP协议

    [前五篇]系列文章传送门: 网络协议 15 - P2P 协议:小种子大学问 网络协议 16 - DNS 协议:网络世界的地址簿 网络协议 17 - HTTPDNS:私人定制的 DNS 服务 网络协议 ...

  2. Kafka深度解析

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...

  3. Kafka深度解析(如何在producer中指定partition)(转)

    原文链接:Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能 ...

  4. Spring源码深度解析之数据库连接JDBC

    Spring源码深度解析之数据库连接JDBC JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供 ...

  5. JSON-RPC轻量级远程调用协议介绍及使用

    这个项目能够帮助开发人员利用Java编程语言轻松实现JSON-RPC远程调用.jsonrpc4j使用Jackson类库实现Java对象与JSON对象之间的相互转换.jsonrpc4j包含一个JSON- ...

  6. Google物联网操作系统协同框架Weave深度解析

    1.       Google Weave框架 在2015年的Google I/O大会上,负责Android业务的桑达.皮查伊(SundarPichai)宣布了Google最新的物联网战略.这包括一个 ...

  7. Android基础总结(12)——XML和JSON解析

    XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...

  8. 什么是XML RPC?

    # -*- coding: cp936 -*- #python 27 #xiaodeng #什么是XML RPC? #中文叫:远程过程调用 #使用http协议做传输协议的rpc机制,使用xml文本的方 ...

  9. Hibernate 3 深度解析--苏春波

    Hibernate 3 深度解析   Hibernate 作为 Java ORM 模式的优秀开源实现, 当下已经成为一种标准,为饱受 JDBC 折磨的 Java 开发者带来了“福音.快速的版本更新,想 ...

随机推荐

  1. jQuery 自学笔记—5 遍历

    什么是遍历? jQuery 遍历,意为“移动”,用于根据其相对于其他元素的关系来“查找”(或选取)HTML 元素.以某项选择开始,并沿着这个选择移动,直到抵达您期望的元素为止. 下图展示了一个家族树. ...

  2. spring集成 JedisCluster 连接 redis3.0 集群

    最近在公司做了 jedisCluster整合spring 的配置, 分享如下 客户端采用最新的jedis 2.7 1. maven依赖: <dependency> <groupId& ...

  3. 对付"反盗链"

    对付"反盗链" 某些站点有所谓的反盗链设置,其实说穿了很简单, 就是检查你发送请求的header里面,referer站点是不是他自己, 所以我们只需要像把headers的refer ...

  4. 解决IE11无法下载文件的问题

    [问题描写叙述] 单击IE底部下载工具栏没反应,点击"另存为"也没反应 [解决方法] 打开IE11,依次打开菜单:Internet 选项 -> 高级 -> 重置,重置完 ...

  5. NYOJ 12 喷水装置(二)

    pid=12">喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n( ...

  6. javaScript滚动新闻

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  7. apache cxf之 一个简单的JAX-WS服务程序

    推荐一本apache cxf的书籍: apache cxf的配置,这边就不做介绍了.请参照我关于它配置的博文. 开发步骤: 1.新建Java project,build path引入cxf runti ...

  8. 关于LIST.Select().ToList()慢的问题

    var sendlist = emailList.Select(email => new MailMessage { MailServer = SMTPServer, UserName = Se ...

  9. HTTP真的很简单(转)

    原文:HTTP Made Really Easy因为我本身网络基础就很差,所以看到这篇文章一方面是学习网络知识,另一方面为了锻炼我蹩脚的英语水平,文中如有错误,欢迎浏览指正! 前言 在看这篇文章的时候 ...

  10. Linux如何查找大文件或目录总结及在全部目录中查找

    在Windows系统中,我们可以使用TreeSize工具查找一些大文件或文件夹,非常的方便高效,在Linux系统中,如何去搜索一些比较大的文件呢?下面我整理了一下在Linux系统中如何查找大文件或文件 ...