精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-23
这一次,我们需要跨平台通用远程调用框架的神话么?
事情起因是开发各方讨论系统中的两种接口
接口基本需求:1、用户数据的同步接口 2、业务接口,包含客户端对服务器端的控制接口和服务器端对客户端的实时状态汇报接口。
拿到这样的一个需求,HTTP基本的通信协议基本是必选,对上层应用协议,大家首先想到的都是SOAP。于是有了下面的解决方案:
1、 对第一类接口定义了SOAP接口,并对用户属性的变化进行了预计设计。接口类似如下update(propertyList list),propertyList定义为KEY/Value的值对。好处如下是客户端和服务器端与服务器端之间只保存一个WSDL文件,在用户数据发生变化的时候,该接口不用发生变化。
上述方案中,第一类接口和第二类接口是类似的思路,都是定义一个通用的远程调用函数接口,并且从远程调用的角度去分析其优缺点。在这些冠冕堂皇的优点后面大家都甘之如饴,以为跨平台通用远程调用框架发挥了化腐朽为神奇的作用。然而恕我直言,消息传输就是消息传输,面向消息的通信方式可以解决的问题,完全没有必要扯上远程过程调用,在上述的场合直接的HTTP+业务数据已经可以很简洁的解决问题。由于第二类接口中打算自造轮子实现通用远程调用框架,和用SOAP实现没有本质的区别,归作一类进行分析:
1、 如果把HTTP+XML业务消息的通信方式描述成函数Post(XML DATA),update(propertyList list)这种接口和Post(XML DATA)一样都具有下面的特性:
通用的通信协议原本就具有通用远程过程调用接口梦寐以求的特性。
2、 通用远程调用框架下的通信消息的消息结构可以是HTTP+基于XML通用远程调用层+业务消息的结构。比起HTTP+XML的通信方式多了一个基于XML通用远程调用层,这层的实现可以使用SOAP类库,但是由于定义成通用的SOAP接口并只有一个WSDL文件,消息只能分发到一个函数入口,虽然添加了庞大的SOAP处理引擎,但无法利用现成的SOAP类库将请求分发到后端的各个不同业务处理函数,因此这种模式下仍然必须手工实现对消息的分发。而在HTTP+XML的方式中,也需要分发机制,然而却简洁很多。可以说,由于平白无故增加了基于XML通用远程调用层增加了性能消耗和处理复杂度,无比辛苦的把XML消息映射成具体平台相关的数据结构(这个映射耗费性能并且带来互操作性的问题)之后,还是需要做消息的分发,起点并没有比HTTP+XML高。
面向操作的开发模式中WSDL和具体语言的具体操作接口绑死,导致修改WSDL需要重新使用工具导出具体语言的接口。这个是SOAP实现的远程过程调用本身带来的问题,面向消息的处理机制中则从来没有这方面的问题。
4、 其他优缺点比较
b) 通用远程过程调用通信框架如果用SOAP实现则通信协议实际上是绑死了HTTP。上述第一类接口其实含有一个隐含的架构需求,数据的批量处理,和减少服务器之间的连接数。HTTP+XML业务数据的通信方式其实很容易移植到UDP+XML业务数据、TCP+XML业务数据和FTP+XML业务数据文件等批量数据快捷处理方式。SOAP协议虽然号称设计上预计在不同传输协议上传输,应用上却没有见过其他协议上成功应用。
d)HTTP+XML业务消息中可以多个XML业务消息放到同一个HTTP请求中,减少连接数和通信量,而在通用的WSDL方案中,多个数据放到同一个HTTP消息中则导致一个庞大的XML消息,庞大的XML消息处理在还原成内存中的数据结构的时候很可能有占用太大的缓存的问题。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 2081 次