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'), "\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;
}
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();
    }

PHPRPC for PHP的更多相关文章

  1. phprpc的简单使用

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

  2. NuSOAP与PHPRPC比较(转)

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

  3. PHPRPC jsp发布服务

    PHPRPC是面向服务的高性能远程过程调用协议.PHPRPC for java 是此协议的一种实现,详细请到官方看PHPRPC的介绍 ,以其它rpc协议的性能对比请:Java.PHPRPC.Hessi ...

  4. phprpc 使用实例(例实没错却不能执行)函数冲突gzdecode

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

  5. Yii框架中集成phprpc、hprose

    在项目开发的过程中有时候会涉及到对外提供接口供第三方程序调用或者是不同程序间需要相互通信,那么最通用的做法是用传统的SOAP方式来实现,用XML的文档格式来作为传输载体.但是这种方式不灵活,支持的数据 ...

  6. 利用PHPRPC以及SOAP分别实现PHP的Webserver功能

    服务端:phprpc服务端 <?php /* phprpc 服务端演示 * time:2014-06-23 */ require_once 'phprpc_server.php';//引入服务端 ...

  7. 浅析Thinkphp框架中运用phprpc扩展模式

    浅析Thinkphp框架中应用phprpc扩展模式 这次的项目舍弃了原来使用Axis2做web服务端的 方案,改用phprpc实现,其一是服务端的thinkphp已集成有该模式接口,其二是phprpc ...

  8. phprpc 使用实例(同时有Java、Android和Delphi客户端的例子)

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

  9. 调用phprpc的时候出现Fatal error: Cannot redeclare gzdecode()

    出现这个问题的原因是:php在5.4版本后,已经自包含了gzdecode()函数,开发者自己定义的gzdecode()函数会与其冲突. 在 ....\phpRPC\compat.php文件的第72行( ...

随机推荐

  1. STRUTS2核心控制器:FilterDispatcher

    1. 在 struts1.x 系列中 , 所有的请求是通过一个 servlet(ActionServlet) 来管理控制的 , 在 Struts2.X 而是经过一个 Filter 来处理请求的. St ...

  2. MVC自学第四课

    处理表单 前面的列子我们已经把表单提交给了HomeControllers类中的RsvpForm动作方法,只是在这个动作方法内,我们并没有做什么具体的逻辑处理,而是直接返回一个 “Thanks”的视图. ...

  3. CentOS和Redhat发行版linux内核版本的对应关系

    由于Redhat和CentOS的发行版本现在众多,所以我们应该知道CentOS和Redhat及linux内核之间版本的对应关系对维护系统还是很有帮助的.对应的列表如下: Redhat 9.0————— ...

  4. ReentrantLock(重入锁)以及公平性

    ReentrantLock(重入锁)以及公平性 标签(空格分隔): java NIO 如果在绝对时间上,先对锁进行获取的请求一定被先满足,那么这个锁是公平的,反之,是不公平的,也就是说等待时间最长的线 ...

  5. Oracle EBS-SQL (SYS-13):查询DBA在系统中的打Patch的信息.SQL

    查询DBA在系统中的打补丁信息 1. select * from ad_patch_drivers          /*查看已经打了哪些Patch*/ 2. select * from ad_pat ...

  6. isequal 和startswith 使用

    如果要把不同服务器发送过来的日志保存到不同的文件, 可以这样操作: :fromhost-ip, isequal, "192.168.0.160″ /var/log/host160.log : ...

  7. 汉诺塔VII(递推,模拟)

    汉诺塔VII Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  8. 在线词典php

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. C++中的随机数函数(

    标签:ul 随机数 c 整数 max 教育  C++中产生随机数种子对于刚開始学习的人一直都非常困惑.大家知道,在C中有专门的srand(N)函数能够轻松实现这一功能,然而在C++中则要复杂一些.以下 ...

  10. 潜在语义分析Latent semantic analysis note(LSA)原理及代码

    文章引用:http://blog.sina.com.cn/s/blog_62a9902f0101cjl3.html Latent Semantic Analysis (LSA)也被称为Latent S ...