PHPRPC for PHP

web相关

2009-11-20 13:39

PHPRPC  PHPRPC 是一个轻型的、安全的、跨网际的、跨语言的、跨平台的、跨环境的、跨域的、支持复杂对象传输的、支持引用参数传递的、支持内容输出重定向的、支持分级错误处理的、支持会话的、面向服务的高性能远程过程调用协议。

下载地址:http://www.phprpc.org/zh_CN/download/
该版本直接解压后就可以使用,其中

属于公共文件。不论是客户端还是服务器端都需要这些文件。

是客户端文件,如果你只需要使用客户端,那么只要有上面那些公共文件和这个文件就可以使用了,使用时,直接在你的程序中包含 phprpc_client.php 就可以,公共文件不需要单独包含。
这三个文件是服务器端需要的文件。
其中 dhparams 目录中包含的是加密传输时用来生成密钥的参数
dhparams.php 是用来读取 dhparams 目录中文件的类。
phprpc_server.php 是服务器端,如果你要使用 PHP 来发布 PHPRPC 服务,只需要包含这个文件就可以了。公共文件和 dhparams.php 都不需要单独包含。

运行环境

<?php   

include('php/phprpc_server.php');             //加载文件

function hello($name) {   

    return 'Hello ' . $name;   

}   

$server = new PHPRPC_Server();                //创建服务端

$server->add(array('hello', 'md5', 'sha1'));    //数组形式一次注册多个函数

$server->add('trim');                                      //单一注册

$server->start();                                           //开启服务

?>  



<?php   

include ("php/phprpc_client.php");                                              //加载文件

$client = new PHPRPC_Client('http://127.0.0.1/server.php');       //创建客户端 并连接服务端文件

echo $client->Hello("word");                                                         //调用方法 返回 hello word

?>  

-----------------------------------------------------------------------------------------------------------------------------------
服务端其他说明:
<?php   
include('php/phprpc_server.php');             //加载文件

function
hello($name) {   
    return 'Hello ' . $name;   
}
class Example1 {   
  static function foo() {   
       return 'foo';     
     }
   
function bar() {   
        return 'bar';   
    }   
}   
$server = new PHPRPC_Server();                //创建服务端

$server->add('foo', 'Example1');                   //静态方法直接调用   

$server->add('bar', new Example1());         //非静态方法 需要实例化

//注册别名调用
$server->add('hello', NULL, 'hi');                 //第三参数是函数的别名   客户端通过别名来调用函数
$server->add('foo', 'Example1', 'ex1_foo');   
$server->add('bar', new Example1(), 'ex1_bar');

$server->setCharset('UTF-8');                  //设置编码
$server->setDebugMode(true);                //打印错误
$server->setEnableGZIP(true);                //启动压缩输出虽然可以让传输的数据量减少,但是它会占用更多的内存和 CPU,因此它默认是关闭的。

$server->start();                                           //开启服务

?>
--------------------------------------------------------------------------------------------------------------------------------
客户端其他说明:

<?php   

include ("php/phprpc_client.php");   

$client = new PHPRPC_Client();   

$client->useService('http://127.0.0.1/server.php');              //远程调用地址

$client->setKeyLength(1000);                                             //密钥长度

$client->setEncryptMode(3);                                                //加密等级0-3

$client->setCharset('UTF-8');                                              //设置编码

$client->setTimeout(10);                                                     //设置超时时间

echo $client->hi('PHPRPC'), "\r\n";                                     //调用函数

echo $client->getKeyLength(), "\r\n";                                //下面是返回值

echo $client->getEncryptMode(), "\r\n";                          

echo $client->getCharset(), "\r\n";   

echo $client->getTimeout(), "\r\n";   

?>  
---------------------------------------------------------------------------------------------------------------------------

关于session

<?php   

include('php/phprpc_server.php');   

class ExampleCounter {   

    function ExampleCounter() {   
        if (!isset($_SESSION['count'])) {   
              $_SESSION['count'] = 0;   
       }   
}   

    function inc() {   
           $_SESSION['count'] += 1;  
     }   

    function count() {   
          return $_SESSION['count'];   
    }   

}   

$server = new PHPRPC_Server();   
$server->add(array('inc', 'count'), new ExampleCounter());   
$server->start();   

?>  

<?php
include("php/phprpc_client.php");  
$client = new PHPRPC_Client();  
$client->useService('http://127.0.0.1/1.php');  
$client->setTimeout(10);  
echo $client->inc();
echo $client->count();
echo $client->inc();
echo $client->count();
?>  
每次刷新都是新建的client 服务端并不能识别.