这一次,我们需要跨平台通用远程调用框架的神话么?
事情起因是开发各方讨论系统中的两种接口
接口基本需求:1、用户数据的同步接口 2、业务接口,包含客户端对服务器端的控制接口和服务器端对客户端的实时状态汇报接口。
接口非功能性需求:跨平台,第二类接口中客户端可能在企业内网,要求穿越防火墙、NAT、并且可能没有外部IP。
拿到这样的一个需求,HTTP基本的通信协议基本是必选,对上层应用协议,大家首先想到的都是SOAP。于是有了下面的解决方案:
1、 对第一类接口定义了SOAP接口,并对用户属性的变化进行了预计设计。接口类似如下update(propertyList list),propertyList定义为KEY/Value的值对。好处如下是客户端和服务器端与服务器端之间只保存一个WSDL文件,在用户数据发生变化的时候,该接口不用发生变化。
2、 第二类接口不能直接使用SOAP,并且服务器端到客户端的状态推送需要使用HTTP推的技术。有人提出了定义一个XML SCHEMA,该SCHEMA描述的接口如FuncName(param1,param2,param3……)来作为第二类接口,好处是:任何业务相关的控制状态信息都可以通过该接口通信,客户端与服务器端之间只维护一份XML SCHEMA
上述方案中,第一类接口和第二类接口是类似的思路,都是定义一个通用的远程调用函数接口,并且从远程调用的角度去分析其优缺点。在这些冠冕堂皇的优点后面大家都甘之如饴,以为跨平台通用远程调用框架发挥了化腐朽为神奇的作用。然而恕我直言,消息传输就是消息传输,面向消息的通信方式可以解决的问题,完全没有必要扯上远程过程调用,在上述的场合直接的HTTP+业务数据已经可以很简洁的解决问题。由于第二类接口中打算自造轮子实现通用远程调用框架,和用SOAP实现没有本质的区别,归作一类进行分析:
1、 如果把HTTP+XML业务消息的通信方式描述成函数Post(XML DATA),update(propertyList list)这种接口和Post(XML DATA)一样都具有下面的特性:
a) 接口也很稳定
b) 任何业务数据都能通过,当然任何数据都可以通过。
通用的通信协议原本就具有通用远程过程调用接口梦寐以求的特性。
2、 通用远程调用框架下的通信消息的消息结构可以是HTTP+基于XML通用远程调用层+业务消息的结构。比起HTTP+XML的通信方式多了一个基于XML通用远程调用层,这层的实现可以使用SOAP类库,但是由于定义成通用的SOAP接口并只有一个WSDL文件,消息只能分发到一个函数入口,虽然添加了庞大的SOAP处理引擎,但无法利用现成的SOAP类库将请求分发到后端的各个不同业务处理函数,因此这种模式下仍然必须手工实现对消息的分发。而在HTTP+XML的方式中,也需要分发机制,然而却简洁很多。可以说,由于平白无故增加了基于XML通用远程调用层增加了性能消耗和处理复杂度,无比辛苦的把XML消息映射成具体平台相关的数据结构(这个映射耗费性能并且带来互操作性的问题)之后,还是需要做消息的分发,起点并没有比HTTP+XML高。
3、 一个WSDL文件能够适应所有情况的“银弹”。
WSDL文件本意是定义客户端与服务器端的消息约束文件。换成了通用的WSDL文件之后,WSDL文件无法告知服务器端能接收什么样的消息。例如update(propertyList list),propertyList定义为KEY/Value的值对。这种接口客户端看了WSDL文件其实还是不知道服务器端能接收什么样的消息,它能接收什么的KEY NAME?每个KEY对应的Value是什么类型的数据?这一部分的信息接口完全没有涉及。因此仍然需要一个约束的文档描述具体的业务消息约束,在非通用的远程过程调用的场合,这个业务消息约束是WSDL,在HTTP+XML通信中,则可以定义成普通的XMLSCHEMA。
面向操作的开发模式中WSDL和具体语言的具体操作接口绑死,导致修改WSDL需要重新使用工具导出具体语言的接口。这个是SOAP实现的远程过程调用本身带来的问题,面向消息的处理机制中则从来没有这方面的问题。
4、 其他优缺点比较
a) 通用远程过程调用通信框架如果用SOAP实现则引入SOAP在不同平台下的互操作性的问题。为了最大限度的避免互操作性的问题,必须遵守WebService Base Profile 1.x系列标准,但是仍然不是彻底解决SOAP的互操作性问题。
b) 通用远程过程调用通信框架如果用SOAP实现则通信协议实际上是绑死了HTTP。上述第一类接口其实含有一个隐含的架构需求,数据的批量处理,和减少服务器之间的连接数。HTTP+XML业务数据的通信方式其实很容易移植到UDP+XML业务数据、TCP+XML业务数据和FTP+XML业务数据文件等批量数据快捷处理方式。SOAP协议虽然号称设计上预计在不同传输协议上传输,应用上却没有见过其他协议上成功应用。
c) HTTP+XML业务消息模式中XML处理实现上可以更灵活,XML数据处理可以使用通用的XML引擎,也可以在每个业务方法中使用XML PULL机制加速XML数据处理速度,XML PULL 资料可以参见http://www.extreme.indiana.edu/xgws/xsoap/xpp/mxp1/。
d)HTTP+XML业务消息中可以多个XML业务消息放到同一个HTTP请求中,减少连接数和通信量,而在通用的WSDL方案中,多个数据放到同一个HTTP消息中则导致一个庞大的XML消息,庞大的XML消息处理在还原成内存中的数据结构的时候很可能有占用太大的缓存的问题。
分享到:
相关推荐
远程调用服务框架是软件开发中的一个重要组成部分,它允许不同系统、不同网络环境下的应用程序之间进行通信,实现功能的解耦合和分布式系统的构建。在Java世界中,Spring框架提供了强大的支持来实现这一目标。本篇...
Hessian远程调用框架是基于Java的轻量级RPC(Remote Procedure Call)解决方案,它允许开发者在分布式系统中实现高效、便捷的跨网络对象方法调用。本教程将引导你入门Hessian,通过一个简单的JAVA demo来理解其工作...
该项目是采用C语言编写的ERPC嵌入式远程调用框架设计源码,集成了48个头文件、14个C源文件、11个动态库文件、10个Markdown文件、8个文本文件、8个归档文件、7个链接库文件、6个Python脚本文件、5个PNG图片文件,以及...
基于java的开发源码-brap(Java远程调用框架 BRAP).zip 基于java的开发源码-brap(Java远程调用框架 BRAP).zip 基于java的开发源码-brap(Java远程调用框架 BRAP).zip 基于java的开发源码-brap(Java远程调用框架 BRAP)....
在Java中,Akka可以用来实现TCP远程调用,这使得不同系统之间能够通过网络进行通信。下面我们将深入探讨如何使用Akka与Java来实现TCP远程调用,以及其中涉及的关键知识点。 首先,我们需要理解Akka的Actor系统。...
RCF(Remote Call Framework)是一个高性能、功能丰富的远程过程调用框架,它允许开发者轻松地创建分布式应用程序,提供了一种高效的方式来实现不同计算机之间的通信。RCF 支持多种数据序列化方式,并且具有良好的跨...
在IT领域,远程调用对象(Remote Procedure Call, RPC)是一种常见的通信机制,它允许一个程序在不关心网络细节的情况下,调用运行在另一台计算机上的程序或服务。本示例将聚焦于VB(Visual Basic)环境下的RPC实现...
远程方法调用(Remote Method Invocation,RMI)是Java提供的一种强大的分布式计算技术,它允许在不同的Java虚拟机(JVM)之间进行方法调用,实现了对象的跨平台交互。这个"RMI跨平台调用的demo"展示了如何在Windows...
在Java EE平台上,Spring框架提供了一种强大的方式来实现远程服务调用,特别是通过其HttpInvokerServiceExporter组件来实现基于HTTP的WebService功能。这个技术允许客户端和服务端通过HTTP协议进行通信,实现远程...
在IT领域,远程调用是一种关键技术,它允许一个应用程序组件(客户端)调用另一个在不同地址空间运行的应用程序组件(服务器)的方法,就像它们在同一进程内一样。在本示例中,我们关注的是C#语言中的远程调用,具体...
XXL-RPC是一款开源的分布式服务框架,专为Java开发者设计,旨在提供高效、稳定、易用的远程过程调用(RPC)解决方案。这个“xxl-rpc-master.zip”压缩包包含了该框架的源码和相关示例,帮助开发者更好地理解和使用...
HTTP远程调用是Spring Remote的一种实现方式,通过HTTP协议来传输数据,具有良好的可伸缩性和跨平台性。 要实现Spring的HTTP远程调用,我们主要涉及两个关键部分:服务端(Server)和客户端(Client)。服务端通常...
远程调用技术是一种在分布式系统中,允许一台计算机上的程序(客户端)调用另一台计算机上程序(服务器)的功能的方法。在本文中,我们将聚焦于使用Socket和WebService这两种远程调用技术,并探讨代码追踪和底层实现...
该项目为高性能跨语言远程过程调用(RPC)框架的Java实现源码,总计包含777个文件,其中包含502个Java源文件、57个XML配置文件、51个JavaScript文件、28个CSS文件、22个PNG图片文件、15个HTML文件、14个Markdown文件...
Python-jrpc是一个基于JSON-RPC 2.0标准的Python远程调用框架,它允许不同进程或计算机间的程序调用对方的方法,就像它们在同一个进程中一样。这种技术在分布式系统和微服务架构中非常常见,因为可以实现服务之间的...
maven项目中跨模块远程调用工具类, 读取配置文件远程调用
Web Service 是一种跨编程语言和跨操作系统平台的远程调用技术,通过 SOAP 在 Web 上提供的软件服务,使用 WSDL 文件进行说明,并通过 UDDI 进行注册。XML 是 Web Service 的基础,它是扩展型可标记语言,面向短期的...
1. **创建服务接口**:首先定义一个服务接口,这个接口将被远程调用。例如,我们有一个名为`UserService`的接口,其中包含用户管理的相关方法,如`getUserById`和`saveUser`。 ```java public interface ...