因为看到有人问 nusoap 和 phprpc 的比较,为了让大家能够更清楚地了解 nusoap 和 phprpc 的关系,所以在这里做一个简要的说明性介绍,所写的内容也不是面面俱到的,只写了一些主要的比较。更多细节的比较大家可以在使用中自己来对比。
nusoap 是一个用于 php 的 web service 实现。php 版本的 phprpc 协议实现跟 nusoap 是一个级别的东西。但是 phprpc 协议是跟 web service 一个级别的东西,所以下面我们来把 nusoap 实现跟 php 版本的 phprpc 协议实现进行比较,把 web service 和 phprpc 协议进行比较。
第一、协议比较:
相同之处:这两个协议都是基于 http 协议的,都可以使用 post 方法提交请求。主要不同之处:(1) 请求:webservice 虽然也支持 get 方式提交请求,但是一般不常用,常用的方式是利用 post 方法提交 soap 格式的请求。而 phprpc 支持 get 和 post 两种方式来提交请求,请求格式是最常见的 application/x-www-form-urlencoded 格式,这对于实现一个浏览器客户端来说更加容易。(2) 响应:webservice 返回的响应是 soap 格式的数据,对于浏览器客户端来说,只有利用 xmlhttprequest 才能够对其进行处理,因为 xmlhttprequest 收到跨域调用的限制,因此 webservice 的浏览器客户端无法做到跨域调用服务。phprpc 的响应格式是兼容于 javascript 格式的纯文本,因此返回的响应可以直接作为脚本执行,因此实现浏览器客户端可以完全不依赖于 xmlhttprequest,利用纯 javascript 即可实现一个浏览器客户端,而浏览器允许跨域下载并执行脚本,因此 phprpc 的浏览器客户端可以做到跨域调用。(3) 数据交换格式:webservice 中所使用的 soap 格式是基于 xml 语言定义的,xml 语言是纯文本的,因为其中的某些位置可以增加或删除一些空白(空格、制表符、回车或换行)而不影响其所表示的内容,因此其格式可以整理成便于人来阅读的,但也由于这点的灵活性,对于机器处理来说效率偏低。而 phprpc 的数据交换格式是 php 序列化格式,php 序列化格式可以算是半纯文本的,因为其数据的表示格式也是采用人类可读的方式表示的,但其中任何位置都不可以插入多于的空白,它对机器的可读性作了很好的支持,不但提供了有效的分隔符,并且提供了字符串长度、数组元素个数、对象成员个数等信息,所以更有利于机器高速处理。因为协议本质上是机机语言,而不是计算机程序设计语言,计算机程序设计语言是人机语言,它应该更偏重于人类可读性,而机机语言应该更重视机器可读性。因此可以说 php 序列化格式在人类可读性和机器可读性之间做到了非常好的平衡。(4) 带宽占用:webservice 是重量级的 web 服务,其数据格式冗长拖沓,占用网络带宽高。phprpc 是轻量级的 web 服务,其数据格式简单紧凑,占用网络带宽低。注意,这里所说到重量级和轻量级是指网络带宽占用,而不是指其提供服务的能力,phprpc 所提供的服务能力绝不逊色于 webservice,甚至在很多地方优于 webservice。打个比方说:webservice 就像是 osi 的 7 层网络模型,看似完美,但实现复杂,使用困难。而 phprpc 则像是简化了的 tcp/ip 的 5 层网络模型,实现高效,使用方便。
第二、然后我们再来比较 nusoap 和 php 版本的 phprpc协议实现:相同之处是都用于 php。不同之处主要在于易用性上,nusoap 虽然在易用性上做的还算不错,但是跟 php 版本的 phprpc 协议实现来比较就差太远了。例如,利用 nusoap 发布的服务函数需要单独编写,而不能使用跟本地函数同样的方式进行编写,更无法使用 php 中内置扩展的函数,而 phprpc 所发布的函数跟本地函数完全一样,甚至包括 php 内置扩展的函数也可以直接发布。要用 nusoap 发布一个 wsdl,需要为每一个发布的过程的名称、参数名、参数类型、返回值类型、名空间、动作、样式、文档等内容进行定义。而要发布一个 phprpc 服务,只需要告诉服务器要发布的那个函数(也可以是对象方法或类方法)的名字(还可以给出别名)即可。而不需要给出参数名、参数类型、返回值类型等信息。因此对于变长参数,可变类型参数的支持更好。在 phprpc 客户端的使用上,也是同样的方便,可以直接以远程函数名命名的本地 phprpc 客户端的方法来调用远程函数,而 nusoap 相对来说比较麻烦一些。phprpc 还有一个很大的优势在于,它可以让你很轻松的以安全加密传输的方式来进行远程调用,这一点 nusoap 是做不到的。
http://www.bkjia.com/phpjc/508347.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/508347.htmltecharticle因为看到有人问 nusoap 和 phprpc 的比较,为了让大家能够更清楚地了解 nusoap 和 phprpc 的关系,所以在这里做一个简要的说明性介绍,所写的…