浅析 PHPRPC 与 CORBA

UlsterBoy 写道
如果 PHPRPC 是协议,那么 PHPRPC 与 CORBA 比较的优势在哪里呢?


先说使用方面:

CORBA 是基于静态编译型语言设计的,因此,使用 CORBA 时你必须要走的流程就是编写 IDL,然后通过工具将 IDL 转换为你所使用语言的客户端和服务器端的 stub 文件,之后基于这些 stub 文件分别编写客户端和服务器端,最后编译完成,正常的话服务器和客户端就可以通讯了。

PHPRPC 是基于动态脚本型语言设计的(虽然它同样可以很好的支持静态编译型语言),因此,它具有很多动态特性,你不需要编写任何 IDL 这样的东西,也不需要任何 stub 文件,服务器端和客户端是独立的,它们不需要有一个完全一致的接口,在客户端调用服务器端,在动态脚本型语言中(例如 PHP、Ruby、Python)中你可以直接通过指定服务器地址(这个地址也当然是可以放入配置文件的),然后就可以直接调用服务器端方法,像不定长参数、不定类型参数(不是无类型)这些能力都支持,当然还有许多其它 CORBA 所不具备的动态特性。而在静态语言中,你可以通过用语言本身创建接口的方式来自创建远程代理(比如 Java、C#),之后通过远程代理对象,你也可以直接调用服务器端方法,而且动态语言具有的特性,这里也都具备。因此,在使用上,PHPRPC 更简单也更灵活。

再说协议方面:

CORBA 是一个众所周知的庞大的分布式对象模型体系,将它简单的称之为一个协议是不合适的。它的内容包含了分布式对象的方方面面。

PHPRPC 是一个简单的远程过程调用协议,目前的版本底层是 HTTP 绑定的(下一个版本会提供 TCP 和 UDP 绑定),虽然它可以传递对象型数据,而且支持带有复杂引用关系的对象,但它不是一个分布式对象模型。因此它没有分布式对象模型的复杂性。

这里并不是说因为 PHPRPC 协议简单,在能力上就输给了 CORBA。PHPRPC 对目前应用环境中的常用功能都比 CORBA 要好很多。例如 PHPRPC 可以轻松实现 JavaScript 到各种服务器的访问(且可跨域),而 CORBA 却根本不具有这样的能力。而 CORBA 中 80% 的功能是在做那 20% 几乎用不到的事。

另外,CORBA 因为它的庞大体系,导致除了几个商用语言支持外,没有多少语言对它有良好的支持,而在现在常用的动态脚本类语言中,对它支持的更是寥寥无几。而且你如果想靠自身能力去给一个没有支持的语言编写实现都几乎是一件不可能的事。而 PHPRPC 从协议来说相对要简单的多,不但目前已经有 10 多种常用语言的支持,而且任何一个技术人员都可以在很短的时间内掌握协议的内容,并且写出其它语言可兼容的实现。


上面只是一个大致的比较,太详细了一晚上也写不完。

不过在 PHPRPC 出现之前,CORBA 就已经被业界认为是一个失败的产物了,从 Web Service 出现的那一天,人们就开始纷纷抛弃 CORBA。但是当 Web Service 发展这么多年之后,却一步一步走上了 CORBA 的老路,那就是越来越庞大,越来越难理解,越来越难实现,越来越难使用。

《Joel 谈优秀软件开发方法》一书中有一句话,很好的总结了这一点:“你不必为不懂那些 WS_* 的用途而感到沮丧,因为其它人也不清楚。之所以没有人说‘停下来!这对于任何人来说都太难理解了’是因为谁都不愿意被看成是笨蛋。”

你可能感兴趣的:(应用服务器,python,脚本,Ruby,phprpc)