zoukankan      html  css  js  c++  java
  • PHPRPC for PHP

    PHPRPC for PHP

    PHPRPC 是一个轻型的、安全的、跨网际的、跨语言的、跨平台的、跨环境的、跨域的、支持复杂对象传输的、支持引用参数传递的、支持内容输出重定向的、支持分级错误处理的、支持会话的、面向服务的高性能远程过程调用协议。
    下载地址:http://www.phprpc.org/zh_CN/download/
    该版本直接解压后就可以使用,其中
    属于公共文件。不论是客户端还是服务器端都需要这些文件。
    是客户端文件,如果你只需要使用客户端,那么只要有上面那些公共文件和这个文件就可以使用了,使用时,直接在你的程序中包含 phprpc_client.php 就可以,公共文件不需要单独包含。
    这三个文件是服务器端需要的文件。
    其中 dhparams 目录中包含的是加密传输时用来生成密钥的参数
    dhparams.php 是用来读取 dhparams 目录中文件的类。
    phprpc_server.php 是服务器端,如果你要使用 PHP 来发布 PHPRPC 服务,只需要包含这个文件就可以了。公共文件和 dhparams.php 都不需要单独包含。
    PHP 4.3+、PHP 5、PHP 6
    客户端要求开启 socket 扩展。
    服务器端需要有 IIS、Apache、lighttpd 等可以运行 PHP 程序的 Web 服务器。
    如果服务器端需要加密传输的能力,必须要保证 session 配置正确。
    <?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 {
    staticfunction 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'), " "; //调用函数
    echo$client->getKeyLength(), " "; //下面是返回值
    echo$client->getEncryptMode(), " ";
    echo$client->getCharset(), " ";
    echo$client->getTimeout(), " ";
    ?>
    -------------------------------------------------- --------------------------------------------------- ----------------------
    关于session
    <?php
    include('php/phprpc_server.php');
    class ExampleCounter {
    function ExampleCounter() {
    if (!isset($_SESSION['count'])) {
    $_SESSION['count'] = 0;
    }
    }
    function inc() {
    $_SESSION['count'] += 1;
    }
    functioncount() {
    return$_SESSION['count'];
    }
    }
    $server = new PHPRPC_Server();
    $server->add(array('inc', 'count'), new ExampleCounter());
    $server->start();
    ?>
    <?php
    include("php/phprpc_client.php");
    $client = newPHPRPC_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 服务端并不能识别.
     
    实例:
    $sku_price  = Skusystemapi::getSkuPrice($_POST['sku']);
    调用端
    /**
         * 获得sku的成本价
         */
        public static function getSkuPrice($sku)
        {
            require_once(Kohana::find_file('vendor','phprpc/phprpc_client'));
            $server_url = Kohana::$config->load('server_url');
            $client     = new PHPRPC_Client($server_url['server'].'/newerpapi/putSkuPrice');
            $results    = $client->getinfo($sku);
            return $results;
        }
     
    被调用端(服务端)
    /**
         * 查询sku的一个成本价
         */
        public function action_putSkuPrice()
        {
            require_once(Kohana::find_file('vendor','phprpc/phprpc_server'));
            $server = new PHPRPC_Server();
            function getinfo($sku)
            {
                $sku     = mysql_escape_string(trim($sku));
                $sql     = "SELECT num FROM price WHERE sku='$sku'";
                $results = DB::query(Database::SELECT,$sql)
                    ->execute('skusystemread')
                    ->as_array();
                return $results;
            }

            $server->add('getinfo');
            $server->start();
        }
  • 相关阅读:
    如何在应用系统中实现数据权限的控制功能(2)
    客户关系管理系统中对客户及相关数据的导入导出分析处理
    基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出
    基于MVC4+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作
    基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览
    基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动
    基于MVC4+EasyUI的Web开发框架经验总结(6)--在页面中应用下拉列表的处理
    WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭
    .NET项目开发的几个非常重要的项目设置
    使用NVelocity生成内容的几种方式
  • 原文地址:https://www.cnblogs.com/aipiaoborensheng/p/4884913.html
Copyright © 2011-2022 走看看