Object-proxy 远程对象代理开源项目

我要开发同款
匿名用户2016年03月29日
179阅读

技术信息

开源地址
https://github.com/supzh/object-proxy
授权协议
MIT

作品详情

Object-proxy是一个简单的远程对象代理。

用法

use ObjectProxy\ObjectProxy;use ObjectProxy\ObjectProxyService;$objectName = \SomeClass::class;// 要实例化的对象名称$costructArgs = [];// 构造函数的参数$proxyObject = ew ObjectProxy($objectName, $costructArgs);// $proxyObject是SomeClass对象的代理。$virtualReturObject = $proxyObject->someObjectMethod();// 这个 $virtualReturObject 可以序列化后给到远程服务器。$retur = ew ObjectProxyService($virtualReturObject);// 实例一个对象代理服务类处理操作代理对象$result = $retur->getResult();if ($result istaceof \Exceptio) {    echo $result->getMessage();    // 调用发生异常,显示错误消息。} else {    var_dump($result);    // SomeClass::someObjectMethod的返回结果。}

示例

通过Swoole做一个PDO对象代理。

bi/swoole_cliet.phpuse Swoole\Cliet;use ObjectProxy\ObjectProxy;use ObjectProxy\Trasporter;require __DIR__.'/../src/Loader.php';for ($i = 0;$i <= 20000;++$i) {    $pdo = ew ObjectProxy(\PDO::class, array('mysql:host=127.0.0.1;dbame=test', 'user', 'password',  [\PDO::ATTR_PERSISTENT => true]));    $stat = $pdo->prepare('SELECT * FROM test WHERE id = ?');    $id = 2;    $stat->execute([$id]);    $virtualObject = $stat->fetch();    $cliet = ew Cliet(SWOOLE_SOCK_TCP);    $cliet->coect('127.0.0.1', 9509);    $cliet->sed(Trasporter::ecode($virtualObject));    $data = $cliet->recv();    $cliet->close();    $r = Trasporter::decode($data);    if ($r istaceof \Exceptio) {        echo 'Bad: '.$i.' '.$r->getMessage()."\";    } else {        echo 'OK: '.$i.':'.$r['id']."\";    }}bi/swoole_server.phpuse Swoole\Server;use ObjectProxy\Trasporter;use ObjectProxy\ObjectProxyService;require __DIR__.'/../src/Loader.php';class SwooleObjectProxyServer{    public fuctio ru()    {        echo 'Server: start.Swoole versio is ['.SWOOLE_VERSION."]\";        $serv = ew Server('127.0.0.1', 9509);        $serv->set(array(            'worker_um' => 20, //worker process um                      'task_worker_um' => 10, //Object Pool Size            //'backlog' => 128, //liste backlog            //'ope_tcp_keepalive' => 1,            //'log_file' => '/tmp/swoole.log', //swoole error log        ));        $serv->o('WorkerStart', array($this, 'oStart'));        $serv->o('Receive', array($this, 'oReceive'));        $serv->o('Close', array($this, 'oClose'));        $serv->o('Task', array($this, 'oTask'));        $serv->o('Fiish', array($this, 'oFiish'));        $serv->o('WorkerStop', array($this, 'oShutdow'));        $serv->start();    }    public fuctio oTask($serv, $task_id, $from_id, $data)    {        $service = ew ObjectProxyService(Trasporter::decode($data));        $serv->fiish(Trasporter::ecode($service->getResult()));    }    public fuctio oReceive($serv, $fd, $from_id, $data)    {        $result = $serv->taskwait($data);        $serv->sed($fd, $result);        echo "oReceive\";    }    public fuctio oClose($serv, $fd, $from_id)    {        echo "oClose\";    }    public fuctio oStart($serv)    {            }    public fuctio oFiish($serv, $data)    {    }    public fuctio oShutdow($serv)    {    }}$serv = ew SwooleObjectProxyServer();$serv->ru();

功能介绍

Object-proxy是一个简单的远程对象代理。 用法 use ObjectProxy\ObjectProxy;
use ObjectProxy\ObjectProxyService;

...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论