轻量级跨平台消息传递协议XML-RPC深度解析
一、引言
实现跨平台通信的协议主要有简单对象訪问协议(Simple Object Access Protocol,SOAP)、代表性状态传输(Representational State Transfer,REST)以及 XML 远程过程调用协议(XML Remote
Procedure Call,XML-RPC)等。
二、为什么选择 XML-RPC?
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深度解析的更多相关文章
- 网络协议 20 - RPC 协议(上)- 基于XML的SOAP协议
[前五篇]系列文章传送门: 网络协议 15 - P2P 协议:小种子大学问 网络协议 16 - DNS 协议:网络世界的地址簿 网络协议 17 - HTTPDNS:私人定制的 DNS 服务 网络协议 ...
- Kafka深度解析
本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...
- Kafka深度解析(如何在producer中指定partition)(转)
原文链接:Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能 ...
- Spring源码深度解析之数据库连接JDBC
Spring源码深度解析之数据库连接JDBC JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供 ...
- JSON-RPC轻量级远程调用协议介绍及使用
这个项目能够帮助开发人员利用Java编程语言轻松实现JSON-RPC远程调用.jsonrpc4j使用Jackson类库实现Java对象与JSON对象之间的相互转换.jsonrpc4j包含一个JSON- ...
- Google物联网操作系统协同框架Weave深度解析
1. Google Weave框架 在2015年的Google I/O大会上,负责Android业务的桑达.皮查伊(SundarPichai)宣布了Google最新的物联网战略.这包括一个 ...
- Android基础总结(12)——XML和JSON解析
XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...
- 什么是XML RPC?
# -*- coding: cp936 -*- #python 27 #xiaodeng #什么是XML RPC? #中文叫:远程过程调用 #使用http协议做传输协议的rpc机制,使用xml文本的方 ...
- Hibernate 3 深度解析--苏春波
Hibernate 3 深度解析 Hibernate 作为 Java ORM 模式的优秀开源实现, 当下已经成为一种标准,为饱受 JDBC 折磨的 Java 开发者带来了“福音.快速的版本更新,想 ...
随机推荐
- 从零开始,使用python快速开发web站点(1)
环境:ubuntu 12.04 python版本: 2.73 ok,首先,既然是从零开始,我们需要的是一台可以运行的python的计算机环境,并且假设你已经安装好了python, (ubuntu 或 ...
- 命令模式在MVC框架中的应用
事实上在项目开发中,我们使用了大量的设计模式,不过这些设计模式都封装在框架中了,假设你想要不只局限于简单的使用,就应该深入了解框架的设计思路. 在MVC框架中,模式之中的一个就是命令模式,先来看看模式 ...
- 完整导出IntelliJ IDEA的快捷键
工欲善其事,必先利其器. 常常和代码打交道的人,熟练使用IDE快捷键那是必须的,由于快捷键能够把你从各种罗嗦事中解放出来.比方,假设没有快捷键,你就须要常常性的暂停快速执行的大脑,右手凭记忆摸到鼠标, ...
- hdu 2451 Simple Addition Expression(数位DP )成败在于细节
亚洲区域赛的题,简单的数位DP题,注重细节. 任何细节都有可能导致wa,所以没有绝对的水题. 把握好细节,此题便A. #include<stdio.h> __int64 getans(__ ...
- 【C++】动态开辟二维数组
二维数组在内存中的分配例如以下: C方式呈现: <span style="font-size:18px;"> #include <iostream> usi ...
- Eclipse中的Maven项目报Unbound classpath variable错误
今天更新了最新版的Eclipse luna 4.4版本号,svn更新了项目后,系统一直报错,经查看在Problems窗体中发现一堆错误.提演示样例如以下: Unbound classpath ...
- poj3237(树链剖分)
题目链接:http://poj.org/problem?id=3237 题目大意:指定一颗树上有3个操作: 1)询问操作,询问a点和b点之间的路径上最长的那条边的长度(即最大值): 2)取反操作,将a ...
- 13.怎样自学Struts2之Struts2本地化[视频]
13.怎样自学Struts2之Struts2本地化[视频] 之前写了一篇"打算做一个视频教程探讨怎样自学计算机相关的技术",优酷上传不了,仅仅好传到百度云上: http://pan ...
- JS验证身份证的合法性
//验证身份证的合法性 function IdentityCodeValid(code) { var city={11:"北京",12:"天津",13:&quo ...
- TP 控制器扩展_initialize方法实现原理
参考网址:http://gongwen.sinaapp.com/article-59.html 控制器扩展接口 系统Action类提供了一个初始化方法_initialize接口,可以用于扩展需要,_i ...