Object-proxy 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Object-proxy 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Object-proxy 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Object-proxy 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Object-proxy 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 MIT
开发语言 PHP
操作系统 跨平台
软件类型 开源软件
开源组织
地区 不详
投 递 者 --谜--
适用人群 未知
收录时间 2016-03-29

软件简介

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

用法

use ObjectProxy\ObjectProxy;
use ObjectProxy\ObjectProxyService;

$objectName = \SomeClass::class;
// 要实例化的对象名称
$constructArgs = [];
// 构造函数的参数

$proxyObject = new ObjectProxy($objectName, $constructArgs);
// $proxyObject是SomeClass对象的代理。

$virtualReturnObject = $proxyObject->someObjectMethod();
// 这个 $virtualReturnObject 可以序列化后给到远程服务器。

$return = new ObjectProxyService($virtualReturnObject);
// 实例一个对象代理服务类处理操作代理对象

$result = $return->getResult();

if ($result instanceof \Exception) {
    echo $result->getMessage();
    // 调用发生异常,显示错误消息。
} else {
    var_dump($result);
    // SomeClass::someObjectMethod的返回结果。
}

示例

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

bin/swoole_client.php
use Swoole\Client;
use ObjectProxy\ObjectProxy;
use ObjectProxy\Transporter;

require __DIR__.'/../src/Loader.php';

for ($i = 0;$i <= 20000;++$i) {

    $pdo = new ObjectProxy(\PDO::class, array('mysql:host=127.0.0.1;dbname=test', 'user', 'password',  [\PDO::ATTR_PERSISTENT => true]));

    $stat = $pdo->prepare('SELECT * FROM test WHERE id = ?');

    $id = 2;

    $stat->execute([$id]);

    $virtualObject = $stat->fetch();

    $client = new Client(SWOOLE_SOCK_TCP);
    $client->connect('127.0.0.1', 9509);

    $client->send(Transporter::encode($virtualObject));
    $data = $client->recv();
    $client->close();

    $r = Transporter::decode($data);

    if ($r instanceof \Exception) {
        echo 'Bad: '.$i.' '.$r->getMessage()."\n";
    } else {
        echo 'OK: '.$i.':'.$r['id']."\n";
    }
}
bin/swoole_server.php
use Swoole\Server;
use ObjectProxy\Transporter;
use ObjectProxy\ObjectProxyService;

require __DIR__.'/../src/Loader.php';

class SwooleObjectProxyServer
{
    public function run()
    {
        echo 'Server: start.Swoole version is ['.SWOOLE_VERSION."]\n";

        $serv = new Server('127.0.0.1', 9509);

        $serv->set(array(
            'worker_num' => 20, //worker process num          
            'task_worker_num' => 10, //Object Pool Size
            //'backlog' => 128, //listen backlog
            //'open_tcp_keepalive' => 1,
            //'log_file' => '/tmp/swoole.log', //swoole error log
        ));
        $serv->on('WorkerStart', array($this, 'onStart'));
        $serv->on('Receive', array($this, 'onReceive'));
        $serv->on('Close', array($this, 'onClose'));
        $serv->on('Task', array($this, 'onTask'));
        $serv->on('Finish', array($this, 'onFinish'));
        $serv->on('WorkerStop', array($this, 'onShutdown'));

        $serv->start();
    }

    public function onTask($serv, $task_id, $from_id, $data)
    {
        $service = new ObjectProxyService(Transporter::decode($data));

        $serv->finish(Transporter::encode($service->getResult()));
    }

    public function onReceive($serv, $fd, $from_id, $data)
    {
        $result = $serv->taskwait($data);

        $serv->send($fd, $result);

        echo "onReceive\n";
    }

    public function onClose($serv, $fd, $from_id)
    {
        echo "onClose\n";
    }

    public function onStart($serv)
    {        
    }

    public function onFinish($serv, $data)
    {
    }

    public function onShutdown($serv)
    {
    }
}

$serv = new SwooleObjectProxyServer();

$serv->run();
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2014/03/11 09:25

Proxy

所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。 Proxy模式是很常见的模式,在我们生活中处处可见,例如我们买火车票不一定非要到火车站去买,可以到一些火车票的代售点去买。寄信不一定是自己去寄,可以把信委托给邮局,由邮局把信送到目的地。 代理模式涉及到的三个要点: 1,抽象行为 2,真实角色 3,...

0
2
发表了博客
2018/05/17 11:54

Reverse Proxy Vs Forward Proxy

Reverse Proxy What is Reverse Proxy Server A reverse proxy server is an intermediate connection point positioned at a network’s edge. It receives initial HTTP connection requests, acting like the actual endpoint. Essentially your network’s traffic cop, the reverse proxy serves as a gateway between users and your application origin server. In so doing it handles all policy management and traff...

0
0
发表了博客
2020/10/16 17:45

Proxy error: Could not proxy request

VUE项目启动后,登录,发现报错: Proxy error: Could not proxy request /user/login from localhost:8089 to http://***。**。**:8081/. See https://nodejs.org/api/errors.html#errors_common_system_errors for more information (ENOTFOUND). 报错很明显,代理不过去,需要修改代理配置: 找到vue.config.js ,其中有配置代理的部分,改成正确的后端地址即可: 参考: 本文分享 CSDN - 三分恶。 如有侵权,请联系 suppor...

0
0
发表了博客
2018/08/14 23:00

nginx的proxy_buffering和proxy_cache

nginx的proxy_buffering和proxy_cache 两个都是nginx代理中内存设置相关的参数。 proxy_buffering设置 proxy_buffering主要是实现被代理服务器的数据和客户端的请求异步。 为了方便理解,我们定义三个角色,A为客户端,B为代理服务器,C为被代理服务器。 当proxy_buffering开启,A发起请求到B,B再到C,C反馈的数据先到B的buffer上, 然后B会根据proxy_busy_buffer_size来决定什么时候开始把数据传输给A。在此过程中,如...

0
0
发表了博客
2014/12/10 17:07

proxy

94.23.59.45:3128 91.121.192.178:3128 61.19.177.42:8080 190.136.1.7:8080 177.131.53.28:8080 203.202.250.98:3128 139.0.8.234:8080 110.78.165.157:8080 116.213.51.66:8080 36.78.161.190:8080 111.252.220.151:3128 223.195.87.101:8081 195.88.192.144:8080 173.234.237.213:3128 54.92.26.86:3128 41.160.59.12:8080 202.78.206.83:8080 46.252.36.156:8080 75.102.129.2:8080 185.34.16.117:8080 46.209.236.138:8080...

0
0
发表于大前端专区
2020/03/30 21:23

Proxy代理

# Proxy对象 在一个系统中,总要存储一些数据,对于这些数据,可能有一些是希望我们访问的,但是总有一些是中重要的,不希望我们访问的,希望保护起来,因此ES6新增了代理,在目标对象前架设个“拦截“层,外界对该对象的访问必须通过这层拦截,我们可以对外界的访问进行过滤和改写。 注意:Proxy修改了某些操作的默认行为,等同于在语言层做出修改,所以也属于”元编程“,即对语言进行编程。 语法: let proxy = new Proxy(ta...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
0 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部