1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Object-proxy遠程對象代理

        聯(lián)合創(chuàng)作 · 2023-10-01 10:34

        Object-proxy是一個簡單的遠程對象代理。

        用法

        use ObjectProxy\ObjectProxy;
        use ObjectProxy\ObjectProxyService;
        
        $objectName = \SomeClass::class;
        // 要實例化的對象名稱
        $constructArgs = [];
        // 構(gòu)造函數(shù)的參數(shù)
        
        $proxyObject = new ObjectProxy($objectName, $constructArgs);
        // $proxyObject是SomeClass對象的代理。
        
        $virtualReturnObject = $proxyObject->someObjectMethod();
        // 這個 $virtualReturnObject 可以序列化后給到遠程服務(wù)器。
        
        $return = new ObjectProxyService($virtualReturnObject);
        // 實例一個對象代理服務(wù)類處理操作代理對象
        
        $result = $return->getResult();
        
        if ($result instanceof \Exception) {
            echo $result->getMessage();
            // 調(diào)用發(fā)生異常,顯示錯誤消息。
        } else {
            var_dump($result);
            // SomeClass::someObjectMethod的返回結(jié)果。
        }

        示例

        通過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();
        瀏覽 20
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        編輯 分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        編輯 分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            女人高潮叫床骚话污话 | 肏穴网 | 男生和女生插插插 | 欧美福利在线 | 成人在线欧美 | 91干| 自拍偷拍 中文字幕 | 做爱成人视频 | 国产一级电影片 | 肏屄片|