浏览模式: 标准 | 列表
1月
14

PHPRPC 3.0 for PHP 发布

正式版:

修正了测试版中存在的一些小问题。

Beta 6 Update:

修正了服务器处理某些客户端提交的参数顺序可能不正确的问题。强烈建议更新,否则新版本的 AS2 客户端无法正常与服务器通讯。

Beta 5 Update:

增加了 getEncryptMode 方法。
将日期序列化和反序列化做了修改,将日期类改为 PHPRPC_Date,避免跟 PEAR 中的 Date 类发生冲突。
修正了 bigint.php 中 BC_Math 扩展处理中的一个错误。
为服务器增加了 setEnableGZIP 方法,默认把 GZIP 输出设为关闭。
修正了一系列小问题.
修正了客户端对 chunked 编码处理的一些错误。
为 PHP 增加了一个 Date 类,该类型对象可以直接与其它语言中的日期时间类型直接交换。

Beta 4 Update:

服务器端实现了加密传输中 Cookie-less 会话支持。
服务器端和客户端都实现了 gzip 压缩传输。
服务器端的 add 方法增加了直接添加整个对象中所有方法的功能。假如 $server 是一个 PHPRPC_Server 对象,则 $server->add($object); 可以把 $object 对象的所有方法一起发布,而不用再将它们一一列出。

下载地址请访问 PHPRPC 官方网站:http://www.phprpc.org

» 阅读全文

7月
08

PHPRPC 3.0 for PHP API Draft

Server API:

constructor PHPRPC_Server();

Create the PHPRPC Server object.

add(string funcname);
add(string funcname, null, string alias);
add(string[] funcnames);
add(string[] funcnames, null, string[] aliases);
 
add(string funcname, object obj);
add(string funcname, object obj, string alias);
add(string[] funcnames, object obj);
add(string[] funcnames, object obj, string[] aliases);
 
add(string funcname, string classname);
add(string funcname, string classname, string alias);
add(string[] funcnames, string classname);
add(string[] funcnames, string classname, string[] aliases);

Add global functions, instance methods or static methods to the server. The functions or the methods can have aliases. This method must be called before start().

add(object obj);

Add all methods from obj to the server. This method must be called before start().

setCharset(string charset);

Set the charset of the server. This method must be called before start();

setDebugMode(boolean debug);

Set the debug mode of the server. This method must be called before start();

start();

Start the PHPRPC server. This method usually be called at the end of page. This method can NOT be called twice or more in one page.

Client API:

constructor PHPRPC_Client();
constructor PHPRPC_Client(string serverURL);

Create PHPRPC Client object. The serverURL supports using username and password for the HTTP Basic Authorization, but it is NOT recommend.

setProxy(string address);
setProxy(string host, string port);
setProxy(string host, string port, string username, string password);

Set the proxy server for the transfer. The address supports using username and password for the HTTP Basic Authorization, but it is NOT recommend. You can set the address to NULL to cancel the proxy server.

useService(string serverURL);
useService(string serverURL, string username, string password);

Set the URL of the PHPRPC Server. The serverURL supports using username and password for the HTTP Basic Authorization, but it is NOT recommend. You’d better to set username and password alone.

boolean setKeyLength(integer keyLength);

Set the key length for the key exchange. This method will return false when the key exchange already to be done.

integer getKeyLength();

Get the key length. This method will return actual value when the key exchange being done. Otherwise, you will get the default length or which length you set.

boolean setEncryptMode(integer encryptMode);

Set the encrypt mode. 0 denotes no encrypting any data. 1 denotes encrypting arguments in the transfer. 2 denotes encrypting arguments and result. 3 denotes encrypting arguments, result and output of the server console. Set other value, it would return false.

integer getEncryptMode();

Get the encrypt mode.

setCharset(string charset);

Set the request charset. Use it before invoke the remote function. The default value is “UTF-8″ or as the response charset.

string getCharset();

Get the response charset. Use it after invoke the remote function.

setTimeout(int timeout);

Set the timeout of the invoking of the remote function. the timeout is the number of seconds. Default value is 30 seconds.

integer getTimeout();

Get the timeout of the invoking the remote function. the return value is the number of seconds.

invoke(string funcname, object[] args);
invoke(string funcname, object[] args, boolean byRef);

Invoke the server function with the function name and arguments array. if you want to transfer the arguments by reference, set byRef to be true.

remoteFunctionName(arg1, arg2, ..., argN);

Invoke the server function directly. You can’t transfer the arguments by reference in this mode.

string getOutput();

Get the output of the server console after invoke the server function.

PHPRPC_Error getWarning();

Get the warning of the server function after invoke the server function.

constructor PHPRPC_Error(int errno, string errstr);

You never need to create PHPRPC_Error object by yourself, when an error occurred during invoking remote function, this object will be created automatically as the result of remote function.

integer getNumber();

return error number.

string getMessage();

return error message.

string toString();

return a string which include the error number and error message.

» 阅读全文

Beta 3 Update:

修正了当响应内容较多时,无法全部读取的 bug。

Beta 2 Update:

增加了对 Keep-Alive 的支持,在同一会话中进行多次服务调用时更加高效。
重新编写的纯 PHP 实现的大整数运算库,比原来的版本更加高效。
由于 gmp 在处理大整数运算时速度最快,对密钥交换时所使用的大整数运算的扩展设置为 gmp 优先,其次是 big_int、bcmath 扩展,最后是纯 PHP 实现的大整数运算库。

Beta 1 Update:

实现了 PHPRPC 3.0 协议升级描述中的内容。
实现了 PHPRPC 3.0 for PHP Client API Draft 中的所有接口。
支持 PHP 4.2+ 和 PHP 5+。
增加对没有 bcmath、gmp 和 big_int 扩展的支持。
增加了对 PHP 5 的异常处理的支持。
增加了反序列化未定义类的对象的特殊处理。
与 PHPRPC 2.1、2.0、1.1 的服务器相兼容。

Download: phprpc_3.0_php_client_beta_3.zip

该版本已过期。

» 阅读全文

3月
14

Nusoap vs PHPRPC for PHP

因为看到有人问 Nusoap 和 PHPRPC 的比较,为了让大家能够更清楚地了解 Nusoap 和 PHPRPC 的关系,所以在这里做一个简要的说明性介绍,所写的内容也不是面面俱到的,只写了一些主要的比较。更多细节的比较大家可以在使用中自己来对比。

Nusoap 是一个用于 PHP 的 Web Service 实现。PHP 版本的 PHPRPC 协议实现跟 Nusoap 是一个级别的东西。但是 PHPRPC 协议是跟 Web Service 一个级别的东西,所以下面我们来把 Nusoap 实现跟 PHP 版本的 PHPRPC 协议实现进行比较,把 Web Service 和 PHPRPC 协议进行比较。

1、协议比较:

相同之处:

这两个协议都是基于 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 层网络模型,实现高效,使用方便。

2、然后我们再来比较 Nusoap 和 PHP 版本的 PHPRPC 协议实现:

相同之处是都用于 PHP。

不同之处主要在于易用性上,Nusoap 虽然在易用性上做的还算不错,但是跟 PHP 版本的 PHPRPC 协议实现来比较就差太远了。例如,利用 Nusoap 发布的服务函数需要单独编写,而不能使用跟本地函数同样的方式进行编写,更无法使用 PHP 中内置扩展的函数,而 PHPRPC 所发布的函数跟本地函数完全一样,甚至包括 PHP 内置扩展的函数也可以直接发布。要用 Nusoap 发布一个 wsdl,需要为每一个发布的过程的名称、参数名、参数类型、返回值类型、名空间、动作、样式、文档等内容进行定义。而要发布一个 PHPRPC 服务,只需要告诉服务器要发布的那个函数(也可以是对象方法或类方法)的名字(还可以给出别名)即可。而不需要给出参数名、参数类型、返回值类型等信息。因此对于变长参数,可变类型参数的支持更好。在 PHPRPC 客户端的使用上,也是同样的方便,可以直接以远程函数名命名的本地 PHPRPC 客户端的方法来调用远程函数,而 Nusoap 相对来说比较麻烦一些。PHPRPC 还有一个很大的优势在于,它可以让你很轻松的以安全加密传输的方式来进行远程调用,这一点 Nusoap 是做不到的。

» 阅读全文

Beta 3 Update:

修改了对 Session 的处理方法,在同一会话中可以支持多个客户端进行安全加密传输。
重新编写的纯 PHP 实现的大整数运算库,比原来的版本更加高效。
由于 gmp 在处理大整数运算时速度最快,对密钥交换时所使用的大整数运算的扩展设置为 gmp 优先,其次是 big_int、bcmath 扩展,最后是纯 PHP 实现的大整数运算库。

Beta 2 Update:

更加完善了对客户端发起的 Session 处理。
增加了对 Fatal 和 Compile 错误重定向到客户端的支持。
修正了原来对 PHP 反序列化未定义类时的错误处理。

Beta 1 Update:

实现了 PHPRPC 3.0 协议升级描述中的内容。
实现了 PHPRPC 3.0 for PHP Server API Draft 中的所有接口。
增加了对禁用 Cookie 的客户端的支持(3.0 客户端支持该功能)。
支持 PHP 4.2+ 和 PHP 5+。
增加对没有 bcmath、gmp 和 big_int 扩展的支持。
增加了对 PHP 5 的异常处理的支持。
增加了当客户端传递一个服务器端未定义的类的对象时,服务器端自动定义该类的支持。
与 PHPRPC 2.1、2.0、1.1 的客户端相兼容。

Download: phprpc_3.0_php_server_beta_3.zip

该版本已过期。

» 阅读全文