Object-proxy

远程对象代理
授权协议 MIT
开发语言 PHP
所属分类 服务器软件、 代理服务器软件
软件类型 开源软件
地区 不详
投 递 者 孔建柏
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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();
  • 该类提供跟踪对此代理管理的项目进行的更改的功能。任何数量的对象都可使用 addEventListener() 方法“侦听”对此对象的更改。 此类为代理类。可以监听代理的Object对象是否进行更改: ? <s:Application xmlns:fx= "http://ns.adobe.com/mxml/2009"                 xmlns:s= "library://ns.ad

  • 本文简单介绍Object和ObjectProxy的互转 1 Object2ObjectProxy private function object2ObjectProxy():void{ //普通的Object var obj:Object = {"name":"swflash"}; var objProxy:ObjectProxy = new Obj

  • kube-proxy 报错:Failed to execute iptables-restore: exit status 1 现象:k8s的某node节点 无法使用nodeport方式访问service服务(ip+nodeport),其他node节点正常 原因 kube-proxy组件没成功调iptables添加相关规则原因 操作 更换iptables的版本号降低到 iptables-1.4.2

  • 目的:获取模拟浏览器时请求的参数,把参数带入headers 中, 使用requests 请求数据 #把browsermob-proxy-2.1.4 放入自己的电脑中,我放入的是F盘 server = Server(r'F:\browsermob-proxy-2.1.4\bin\browsermob-proxy.bat') server.start() proxy = server.create_

  • const proxy = require('http-proxy-middleware'); const app = express(); let origin = 'http://www.baidu.com' let host = 'www.baidu.com' const localProxy = proxy({   target: origin,   changeOrigin: true,

  • 简介 flannel 容器无法启动,看日志内容如下 I1102 02:32:56.069875 1 main.go:488] Using interface with name bond0.170 and address xx.xx.xx.xx I1102 02:32:56.069940 1 main.go:505] Defaulting external address

  • Proxy定义 MDN中Proxy对象是用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)。 通俗来说则是在对一个目标对象的操作之前进行拦截,与旧版本的Object.defineProperty()相类似,对外界的操作进行过滤改写,修改对于目标对象操作的默认行为,这样一来就可以不再直接操作对象本身,而是通过proxy封装后的代理对象来间接操作目标对象,达到对应的操作目的 let o

  • 概述 Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改 Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。 Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。 参数 var proxy = new Proxy({}, { get: funct

  • 引言 在前两篇文章,Spring学习笔记 —— AOP(面向切面编程) 之AspectJ, Spring学习笔记 —— AOP(面向切面编程) 之使用ProxyFactoryBean实现AOP,我们介绍了AOP的概念,在Spring下两种实现AOP的方式。 但是,除了面向切面编程之外,AOP的名字空间中还包含了一些重要的标签,比如”scoped-proxy”。这篇文章就会详细介绍这个标签的作用,以

  • ES6 逐点突破系列 – Proxy 以下内容整理自 阮一峰Proxy - ECMAScript 6入门 概述 Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。 var proxy = new Proxy(target, handler); 注意,要使得Proxy起作用,必须针对Proxy实例(

  • JS Proxy 1.概述 Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。 Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以

  • const handler = { defineProperty(target, prop, descriptor) { console.log('trigger defineProperty') return Reflect.defineProperty(target, prop, descriptor) }, deleteProperty(target, prop)

 相关资料
  • 可迭代(Iterable) 对象是数组的泛化。这个概念是说任何对象都可以被定制为可在 for..of 循环中使用的对象。 数组是可迭代的。但不仅仅是数组。很多其他内建对象也都是可迭代的。例如字符串也是可迭代的。 如果从技术上讲,对象不是数组,而是表示某物的集合(列表,集合),for..of 是一个能够遍历它的很好的语法,因此,让我们来看看如何使其发挥作用。 Symbol.iterator 通过自己

  • 概述 JavaScript 原生提供Object对象(注意起首的O是大写),本章介绍该对象原生的各种方法。 JavaScript 的所有其他对象都继承自Object对象,即那些对象都是Object的实例。 Object对象的原生方法分成两类:Object本身的方法与Object的实例方法。 (1)Object对象本身的方法 所谓“本身的方法”就是直接定义在Object对象的方法。 Object.p

  • 概述 Object对象的方法 Object() Object.keys(),Object.getOwnPropertyNames() Object.observe() 其他方法 Object实例对象的方法 Object.prototype.valueOf() Object.prototype.toString() toString()的应用:判断数据类型 对象的属性模型 属性的attributes

  • 元对象编程或MOP可用于动态调用方法,还可以动态创建类和方法。 那么这是什么意思? 让我们考虑一个名为Student的类,它是一个没有成员变量或方法的空类。 假设您必须在此类上调用以下语句。 Def myStudent = new Student() myStudent.Name = ”Joe”; myStudent.Display() 现在在元对象编程中,即使类没有成员变量Name或方法D

  • 描述 (Description) java.lang.reflect.Proxy.getInvocationHandler(Object proxy)方法返回指定代理实例的调用处理程序。 声明 (Declaration) 以下是java.lang.reflect.Proxy.getInvocationHandler(Object proxy)方法的声明。 public static Invocat

  • XStream提供了java.io.ObjectInputStream和java.io.ObjectOutputStream的替代实现,以便可以从XML序列化或反序列化对象流。 当要处理大型对象集时,这一点特别有用,一次将一个对象保留在内存中。 Syntax: createObjectOutputStream() ObjectOutputStream objectOutputStream = xs