PHP PHPRPC 用户指南.docx
《PHP PHPRPC 用户指南.docx》由会员分享,可在线阅读,更多相关《PHP PHPRPC 用户指南.docx(18页珍藏版)》请在冰豆网上搜索。
PHPPHPRPC用户指南
PHPRPC用户指南
PHPRPC是一个工作于Internet之上的远程过程调用(RPC)协议。
该协议具有安全、快速、低负载、功能强大、简单易用等特点。
本手册主要介绍目前已有的PHP的PHPRPC服务器端和客户端、JavaScript实现的PHPRPC浏览器客户端、ASP的PHPRPC服务器端和客户端、.NET的PHPRPC服务器和客户端的使用方法。
本手册所面向的读者为使用PHPRPC来构建系统的开发者。
∙下载
∙安装
∙PHP的PHPRPC服务器端
∙PHP的PHPRPC客户端
∙远程脚本技术实现的PHPRPC浏览器客户端
∙XmlHttpRequest的PHPRPC浏览器客户端
∙增强的JavaScriptPHPRPC浏览器客户端
∙ASP的PHPRPC服务器端
∙ASP的PHPRPC客户端
∙.NET的PHPRPC服务器端
∙.NET的PHPRPC客户端
下载
phprpc_2.1.zip
安装:
首先需要配置好PHP运行环境,然后将phprpc_2.1.zip解压缩到发布目录下,例如:
C:
\Inetpub\wwwroot(如果你安装的是IIS+PHP的话),解压缩后的目录结构看上去像这样:
C:
\Inetpub\wwwroot\phprpc_2.1
|
|
+--asp --PHPRPC的ASP服务器和客户端包含文件
| |
| |
| |-phprpc_server.js --PHPRPC的ASP服务器端实现
| |
| |
| |-phprpc_client.js --PHPRPC的ASP客户端实现
| |
| |
| |-keypair.js --DH密钥交换算法中的p、g对,PHPRPC服务器使用
| |
| |
| +--compressed --压缩版本
|
|
|
+--dotNET --PHPRPC的.NET服务器和客户端包含文件
| |
| |
| |-Server.cs --PHPRPC的.NET服务器端实现
| |
| |
| |-Client.cs --PHPRPC的.NET客户端实现
| |
| |
| |-KeyPair.cs --DH密钥交换算法中的p、g对,PHPRPC服务器使用
| |
| |
| |-PHPSerializer.cs --PHPserialize/unserialize的.NET实现
| |
| |
| |-XXTEA.cs --XXTEA加密算法的.NET实现,加密传输时使用
| |
| |
| |-Mono.Math* --大整数计算类,用于密钥生成和密钥交换(取自Mono项目)
| |
| |
| |-AssemblyInfo.cs --内含编译版本信息和选项
| |
| |
| |-make.bat --用于编译PHPRPCfor.NET的批处理文件(支持.NETFramework1.1/2.0和Mono)
| |
| |
| |-make --用于编译PHPRPCfor.NET的shell脚本文件(支持MonoforLinux/Unix)
| |
| |
| +--pag --内含PHPRPCAgentGeneratorfor.NET源代码
|
|
|
+--doc --PHPRPC的文档
| |
| |
| |-manual.html --PHPRPC用户指南
| |
| |
| |-license.txt --LGPL许可证
|
|
|
+--include --PHPRPC的PHP服务器端和客户端包含文件
| |
| |
| |-bcmath.php --BCMath扩展功能的补充函数,加密传输时使用
| |
| |
| |-keypair.php --DH密钥交换算法中的p、g对,PHPRPC服务器使用
| |
| |
| |-xxtea.php --XXTEA加密算法的PHP实现,加密传输时使用
| |
| |
| |-phprpc_server.php --PHPRPC的PHP服务器端实现
| |
| |
| |-phprpc_client.php --PHPRPC的PHP客户端实现
| |
| |
| |-php4_rpc_client.php --PHPRPC的PHP4客户端
| |
| |
| |-php5_rpc_client.php --PHPRPC的PHP5客户端
|
|
|
+--js --PHPRPC的JavaScript和Ajax客户端的包含文件
| |
| |
| |-base64.js --base64编码的JavaScript实现
| |
| |
| |-utf.js --utf8<->utf16的JavaScript实现
| |
| |
| |-phpserializer.js --PHPserialize/unserialize的JavaScript实现
| |
| |
| |-powmod.js --快速powmod运算的JavaScript实现
| |
| |
| |-xxtea.js --XXTEA加密算法的JavaScript实现
| |
| |
| |-xmlhttprequest.js --跨浏览器的XmlHttpRequest对象的JavaScript实现
| |
| |
| |-phprpc_js_client.js --PHPRPC的纯JavaScript客户端实现
| |
| |
| |-phprpc_ajax_client.js--PHPRPC的Ajax客户端实现
| |
| |
| |-phprpc_client.js --PHPRPC的JavaScript客户端实现
| |
| |
| +--compressed --压缩版本
|
|
|
+--kengen --用于生成keypair.php的程序
| |
| |
| |-bckeygen.php --用BCMath扩展生成keypair.php的程序
| |
| |
| |-bikeygen.php --用big_int扩展生成keypair.php的程序
| |
| |
| |-bckeygen_js.php --用BCMath扩展生成keypair.js的程序
| |
| |
| |-bikeygen_js.php --用big_int扩展生成keypair.js的程序
| |
| |
| |-keygen.cs --C#版本的生成keypair.php的程序,编译时需要BigInteger.cs
| |
| |
| |-keygen_js.cs --C#版本的生成keypair.js的程序,编译时需要BigInteger.cs
| |
| |
| |-keygen_cs.cs --C#版本的生成KeyPair.cs的程序,编译时需要BigInteger.cs
| |
| |
| |-make.bat --用于编译keygen.cs、keygen_js.cs和keygen_cs.cs的批处理文件(支持.NETFramework1.1/2.0和Mono)
| |
| |
| |-make --用于编译keygen.cs、keygen_js.cs和keygen_cs.cs的shell脚本文件(支持MonoforLinux/Unix)
|
|
|
+--sample --示例
| |
| |
| |-server.php --PHP的PHPRPC服务器示例(普通函数远程调用)
| |
| |
| |-server_object.php --PHP的PHPRPC服务器示例(对象方法远程调用)
| |
| |
| |-server_class.php --PHP的PHPRPC服务器示例(类方法远程调用)
| |
| |
| |-client.php --PHP的PHPRPC客户端示例
| |
| |
| |-server.asp --ASP的PHPRPC服务器示例
| |
| |
| |-client.asp --ASP的PHPRPC客户端示例
| |
| |
| |-aspphprpc.html --调用ASP的PHPRPC服务器端的JavaScript客户端示例
| |
| |
| |-aspxphprpc.html --调用ASP.NET的PHPRPC服务器端的JavaScript客户端示例
| |
| |
| |-jsphprpc.html --纯JavaScript的PHPRPC客户端示例
| |
| |
| |-ajaxphprpc.html --Ajax的PHPRPC客户端示例
| |
| |
| |-phprpc.html --JavaScript的PHPRPC客户端示例
| |
| |
| |-wmphprpc.html --WindowMobileIE版本的JavaScript的PHPRPC客户端示例
| |
| |
| +--safelogin --用PHPRPC实现的Ajax安全登录示例
| |
| |
| +--selectmenu --用PHPRPC实现的Ajax级联下拉菜单示例
| |
| |
| +-- --ASP.NET的PHPRPC服务器和客户端示例
在浏览器中键入http:
//localhost/phprpc_2.1/sample/phprpc.html,如果能够正确运行的话,则说明配置正确了。
PHP的PHPRPC服务器端
服务器端需要bcmath.php、keypair.php、xxtea.php和phprpc_server.php这四个文件。
前三个文件在加密传输时需要,如果你确认你的客户端不采用加密传输方式连接服务器,也可以没有前三个文件,但推荐都保留。
如果你不希望使用现成的keypair.php,也可以通过命令行方式运行keygen目录下的bckeygen.php或者bikeygen.php来生成一个新的keypair.php文件。
如果您有.NET2.0运行环境,也可以运行keygen.exe来生成keypair.php文件。
bckeygen.php使用BCMath扩展实现,PHP默认情况下就支持,但耗时较长,大约需要一个多小时才能生成keypair.php。
bikeygen.php比较快,但需要安装big_int扩展,不过也需要大约15分钟到半个小时的时间。
keygen.exe速度最快,大约不到2分钟就可以生成keypair.php了,但需要.NET或Mono运行环境。
实际上使用现成的keypair.php不会比自己生成一份有更多的危险,因为实际上它们不是最后的密钥,而是Diffie-Hellman密钥交换算法中所用到的大素数及其本原根,它们本来就是要在网络上传输的。
如果您还有疑问,请参阅Diffie-Hellman密钥交换算法。
使用时只需要包含phprpc_server.php文件即可,其它三个文件无需包含,只需放在与phprpc_server.php文件相同的目录下即可。
用户接口:
newphprpc_server([[[[mixed$functions],boolean$debug],mixed$obj],string$charset]);
功能:
创建一个PHPRPC服务器。
$functions:
允许调用的函数的函数名字符串或函数名数组。
函数可以是内置函数也可以是用户自定义函数。
例如:
newphprpc_server(array('md5','sha1','crc32'));
这样就可以把md5,sha1和crc32函数提供给客户端调用了。
当只有一个函数时,可以直接为函数名字符串,而不需要是数组。
例如:
newphprpc_server('md5');
这样就可以只把md5函数提供给客户端调用了。
注意:
不要把需要传递或返回资源的函数直接提供给客户端使用。
例如不能将mysql_connect直接提供给客户端调用,但是它可以在提供给客户端调用的函数的内部使用。
如果没有指定该参数(也就是所有参数为空)的话,那么服务不会立即启动,你可以在后面通过add方法来添加方法,用start方法来启动服务。
例如:
$phprpc_server=newphprpc_server();
$phprpc_server.add('md5');
$phprpc_server.start();
注意:
如果在创建该对象时指定了该参数,则服务会立即启动,服务启动后不能再使用add方法来添加函数,也不能用start方法再次启动了。
注意:
如果在创建该对象时指定了该参数,则服务会立即启动,服务启动后不能再使用add方法来添加函数,也不能用start方法再次启动了。
$debug:
调试模式标志。
默认为false。
当debug为true时,表示打开调试模式,打开调试模式后,如果客户端调用的服务器端函数执行时发生错误,将返回更详细的错误信息,包含错误所在的文件和行号,这对于调试程序很有帮助。
$obj:
方法所在的类或者对象。
默认为null。
默认情况下是表示远程调用的函数是普通函数,如果$obj为一个对象,则远程调用的函数是这个对象的同名方法,如果$obj是一个类名(字符串),则远程调用的函数是这个类的同名方法。
该参数可以让你更容易的将对象或者类的方法作为远程调用发布。
注意:
客户端调用时,是不需要也不应该使用这个对象或类前缀的。
使用示例请参见压缩包中的sample/server.php、sample/server_object.php和sample/server_class.php文件。
$charset:
该服务中所使用的字符集,默认为utf-8。
如果是与浏览器客户端或ASP客户端通讯,则只能使用默认的utf-8字符集。
如果与PHP和.NET客户端通讯,可以设置为其它字符集,但必须保证提供调用的函数中所使用的字符集跟这里指定的字符集是一致的,否则客户端可能无法正确识别。
方法:
add(mixed$functions[,mixed$obj]);
参数含义同构造函数中这两个参数的含义相同,但这里$functions参数不能为空。
该方法不能在服务启动后使用。
方法:
start([boolean$debug[,string$charset]]);
参数含义同构造函数中的这两个参数的含义相同,可以都省略。
该方法不能在服务启动后使用。
PHP实现的PHPRPC客户端
客户端需要bcmath.php、xxtea.php、php4_rpc_client.php、php5_rpc_client.php和phprpc_client.php这五个文件。
前两个文件在加密传输时需要,如果你确认你的客户端不采用加密传输方式连接服务器,也可以没有前两个文件,如果你使用PHP4服务器不使用PHP5服务器,可以没有php5_rpc_client.php文件,同样如果只使用PHP5服务器,也可以没有php4_rpc_client.php文件,但推荐都保留。
使用时只需要包含phprpc_client.php文件即可,其它文件无需包含,只需放在与phprpc_client.php文件相同的目录下即可。
用户接口:
newphprpc_client([string$url[,string$user[,string$pass[,integer$timeout]]]]);
功能:
创建一个PHPRPC客户端,并返回该客户端实例。
$url:
PHPRPC服务器地址,如果客户端和服务器为同一服务器,则可以是相对地址,也可以是绝对地址。
一般情况下,客户端和服务器为两台不同的服务器,这时需要用绝对地址。
绝对地址形式为:
。
当该参数缺省时,则只建立PHPRPC客户端对象,在调用远程过程前,需要用use_service方法指定服务器。
$user:
HTTP认证的用户名。
只有服务器要求HTTP认证时才需要该参数。
$pass:
HTTP认证的密码。
只有服务器要求HTTP认证时才需要该参数。
$timeout:
连接服务器的超时时间,单位为秒。
默认为10秒钟。
方法:
set_proxy(string$host,int$port[,string$user=null[,string$pass=null]])
功能:
该方法用于设置代理服务器,应该在使用use_service方法之前使用。
$host:
代理服务器的主机名或IP地址。
$port:
代理服务器的端口号。
$user:
代理服务器如果需要验证,则需要指定的用户名,默认为null,表示代理服务器不需要身份验证。
$pass:
代理服务器如果需要验证,则需要指定的密码,默认为null,表示代理服务器不需要身份验证。
方法:
use_service(string$url[,boolean$encrypt]);
功能:
该方法用于初始化服务。
初始化服务包括设定PHPRPC服务器,并设定是否启用加密传输。
当设定启用加密传输时,将与服务器进行密钥交换。
$url:
PHPRPC服务器地址。
$encrypt:
是否启用加密。
默认为false,表示不启用加密。
方法:
call(string$function,array&$arguments);
功能:
以引用参数传递方式调用远程过程function。
$function:
远程过程名。
$arguments:
参数数组,必须为变量,不能是表达式。
注意:
只有以引用参数传递方式调用远程过程时,才需要使用call方法。
以非引用参数调用远程过程时,直接用远程过程名调用即可,参数直接带入即可,不再需要用数组变量。
例如如果客户端对象为$rpc,要调用的远程过程为md5,则可以直接以如下形式调用:
$result=$rpc->md5('Hello');
当使用call方法或者直接通过远程过程名调用远程过程时,如果远程过程执行中发生失败性错误,则返回结果为phprpc_error对象类型。
它包含两个属性:
errno和errstr,其中errno为错误类型号,其含义请参见PHP手册。
errstr为错误信息,只有当服务器端设置为debug模式时,错误信息中才包含出错文件路径和出错行号。
属性:
output
该属性为只读属性。
当远程过程调用后有效,其值为远程过程的输出捕获。
假设调用的远程过程定义如下:
functionhello($name){
echo'Hello'.$name;
}
客户端调用如下:
$rpc->hello('andot');
echo$rpc->output;
结果为:
Helloandot
属性:
warning
该属性为只