亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

MongoDB

目前,MongoDB 并沒有提供協程版本的 php 客戶端,只有同步阻塞版本。

EasySwoole 的協程版客戶端已經在排期內。

在實際生產中,直接創建原生的 MongoDB客戶端 來進行數據交互,也不是不可。

若希望將同步調用轉為協程調用,可以用 Easyswoole 提供的 sync-invoker 組件。

MongoDB客戶端 的同步調用轉為協程調用具體使用如下:

定義驅動

<?php

namespace App\MongoDb;

use EasySwoole\EasySwoole\Trigger;
use EasySwoole\SyncInvoker\AbstractDriver;
use MongoDB\Client;

class Driver extends AbstractDriver
{
    private $db;

    // 【建議使用】
    // 使用 mongodb/mongodb composer組件包封裝的 MongoDB 客戶端調用類,作為客戶端調用驅動
    // 【前提:需要先使用 `composer require mongodb/mongodb` 安裝 mongodb/mongodb composer組件包】
    function getDb(): Client
    {
        if ($this->db == null) {
            // 這里為要連接的 mongodb 的服務端地址【前提是必須先有服務端,且安裝 php-mongodb 擴展才可使用】
            $mongoUrl = "mongodb://127.0.0.1:27017";
            $this->db = new Client($mongoUrl);
        }
        return $this->db;
    }

    // 僅使用 php-mongodb 擴展內置類(不使用composer組件包的),作為客戶端調用驅動
    /*
    function getDb(): \MongoDB\Driver\Manager
    {
        if ($this->db == null) {
            // 這里為要連接的 mongodb 的服務端地址【前提是必須先有服務端,且安裝 php-mongodb 擴展才可使用】
            $mongoUrl = "mongodb://127.0.0.1:27017";
            $this->db = new \MongoDB\Driver\Manager($mongoUrl);

        }
        return $this->db;
    }
    */

    protected function onException(\Throwable $throwable)
    {
        Trigger::getInstance()->throwable($throwable);
        return null;
    }
}

客戶端調用類定義

<?php

namespace App\MongoDb;

use EasySwoole\Component\Singleton;
use EasySwoole\SyncInvoker\SyncInvoker;

class MongoClient extends SyncInvoker
{
    use Singleton;
}

注冊 Invoker 服務

EasySwoole 全局事件mainServerCreate 事件 中進行服務注冊

<?php

namespace EasySwoole\EasySwoole;

use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        // TODO: Implement initialize() method.
        date_default_timezone_set('Asia/Shanghai');
    }

    public static function mainServerCreate(EventRegister $register)
    {
        // 配置 Invoker
        $invokerConfig = \App\MongoDb\MongoClient::getInstance()->getConfig();
        $invokerConfig->setDriver(new \App\MongoDb\Driver()); // 配置 MongoDB 客戶端協程調用驅動

        // 以下這些配置都是可選的,可以使用組件默認的配置
        /*
        $invokerConfig->setMaxPackageSize(2 * 1024 * 1024); // 設置最大允許發送數據大小,默認為 2M【注意:當使用 MongoDB 客戶端查詢大于 2M 的數據時,可以修改此參數】
        $invokerConfig->setTimeout(3.0); // 設置 MongoDB 客戶端操作超時時間,默認為 3.0 秒;
        */

        // 注冊 Invoker
        \App\MongoDb\MongoClient::getInstance()->attachServer(ServerManager::getInstance()->getSwooleServer());
    }
}

在框架中使用 MongoDB 客戶端(協程調用)

<?php

namespace App\HttpController;

use App\MongoDb\Driver;
use App\MongoDb\MongoClient;
use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\Utility\Random;

class Index extends Controller
{
    public function index()
    {
        // 使用 mongodb/mongodb composer組件包【建議使用,需要先使用composer安裝】
        $ret = MongoClient::getInstance()->invoke()->callback(function (Driver $driver) {
            $ret = $driver->getDb()->user->list->insertOne([
                'name' => Random::character(8),
                'sex' => 'man',
            ]);
            if (!$ret) {
                $driver->response(false);
            }
            $driver->response($ret->getInsertedId());
        });
        var_dump($ret);

        $ret = MongoClient::getInstance()->invoke()->callback(function (Driver $driver) {
            $ret = [];
            $collections = $driver->getDb()->user->listCollections();
            foreach ($collections as $collection) {
                $ret[] = (array)$collection;
            }
            $driver->response($ret);
        });
        var_dump($ret);
        /**
         * 輸出結果:
         * object(MongoDB\BSON\ObjectId)#109 (1) {
             ["oid"]=>
             string(24) "600da377004c82305a02fb52"
           }
         * array(1) {
             [0]=>
             array(1) {
               ["MongoDB\Model\CollectionInfoinfo"]=>
               array(5) {
                 ["name"]=>
                 string(4) "list"
                 ["type"]=>
                 string(10) "collection"
                 ["options"]=>
                 array(0) {
                 }
                 ["info"]=>
                 array(2) {
                   ["readOnly"]=>
                   bool(false)
                   ["uuid"]=>
                   object(MongoDB\BSON\Binary)#110 (2) {
                     ["data"]=>
                     string(16) "EasySwoole"
                     ["type"]=>
                     int(4)
                   }
                 }
                 ["idIndex"]=>
                 array(4) {
                   ["v"]=>
                   int(2)
                   ["key"]=>
                   array(1) {
                     ["_id"]=>
                     int(1)
                   }
                   ["name"]=>
                   string(4) "_id_"
                   ["ns"]=>
                   string(9) "user.list"
                 }
               }
             }
           } 
        */

        // 使用 php-mongodb 擴展時(不使用 mongodb/mongodb composer組件包)
        /*
        // 插入數據
        $rets = MongoClient::getInstance()->invoke()->callback(function (Driver $driver) {
            $bulk = new \MongoDB\Driver\BulkWrite();

            $bulk->insert([
                'name' => Random::character(8),
                'sex' => 'man',
            ]);

            $bulk->insert(['_id' => 1, 'x' => 1]);
            $bulk->insert(['_id' => 2, 'x' => 2]);

            $bulk->update(['x' => 2], ['$set' => ['x' => 1]], ['multi' => false, 'upsert' => false]);
            $bulk->update(['x' => 3], ['$set' => ['x' => 3]], ['multi' => false, 'upsert' => true]);
            $bulk->update(['_id' => 3], ['$set' => ['x' => 3]], ['multi' => false, 'upsert' => true]);

            $bulk->insert(['_id' => 4, 'x' => 2]);

            $bulk->delete(['x' => 1], ['limit' => 1]);

            $manager = $driver->getDb();
            $writeConcern = new \MongoDB\Driver\WriteConcern(\MongoDB\Driver\WriteConcern::MAJORITY, 100);
            // 查到 user 庫的 list 集合中
            $ret = $manager->executeBulkWrite('user.list', $bulk, $writeConcern);

            printf("Inserted %d document(s)\n", $ret->getInsertedCount()); // 插入條數
            printf("Matched  %d document(s)\n", $ret->getMatchedCount()); // 匹配條數
            printf("Updated  %d document(s)\n", $ret->getModifiedCount()); // 修改條數
            printf("Upserted %d document(s)\n", $ret->getUpsertedCount()); // 修改插入條數
            printf("Deleted  %d document(s)\n", $ret->getDeletedCount()); // 刪除條數

            foreach ($ret->getUpsertedIds() as $index => $id) {
                printf('upsertedId[%d]: ', $index);
                var_dump($id);
            }

            if (!$ret) {
                return false;
            }

            return true;
        });

        // 查詢數據
        $rets = MongoClient::getInstance()->invoke()->callback(function (Driver $driver) {
            $filter = ['x' => ['$gt' => 1]];
            $options = [
                'projection' => ['_id' => 0],
                'sort' => ['x' => -1],
            ];

// 查詢數據
            $query = new \MongoDB\Driver\Query($filter, $options);
            $cursor = $driver->getDb()->executeQuery('user.list', $query);
            foreach ($cursor as $document) {
                print_r($document);
            }
        });
        */

    }
}
亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    欧美日韩另类综合| 五月天婷亚洲天综合网鲁鲁鲁| 伊人色综合影院| 国产精品av一区| 噜噜噜噜噜久久久久久91| 在线丝袜欧美日韩制服| 久久视频在线观看中文字幕| 91九色蝌蚪嫩草| 亚洲综合国产| 国产精品呻吟| 中日韩视频在线观看| 国产精品xvideos88| 亚洲午夜精品久久| 亚洲欧美国产不卡| 日韩精品久久久| 欧美一级二级三级| 欧美日韩综合网| 精品日产一区2区三区黄免费| 2019国产精品视频| 老司机精品视频网站| 欧美亚洲三级| 久久精品日产第一区二区 | 久久一综合视频| 亚洲免费网站| 97人摸人人澡人人人超一碰| 老司机精品导航| 久久亚洲一区| 超碰97在线人人| 精品国产乱码久久久久久88av| 国产精品亚洲一区| 免费久久99精品国产自| 久久久久久久久久码影片| 久久久综合亚洲91久久98| 欧美三级网色| 亚洲一区二区三区四区中文| 欧美日韩91| aⅴ色国产欧美| 动漫精品视频| 色一情一区二区三区四区| 欧美精品福利| 亚洲欧美日本日韩| 国产伦精品一区二区三区照片| 狠狠色狠狠色综合人人| 日本午夜精品电影| 欧美日韩在线大尺度| 一区二区动漫| 精品久久精品久久| 午夜精品一区二区在线观看的| 国产精品mv在线观看| 国产日韩一区二区三区在线播放 | 久久精品综合| 欧美福利一区二区三区| 欧美黄污视频| 久久一区二区精品| 区一区二区三区中文字幕| 欧美日韩国产欧| 香蕉精品999视频一区二区 | 一区二区视频在线观看| 亚洲激情网站| 国产精品国产一区二区 | 亚洲国产午夜伦理片大全在线观看网站 | 欧美一区综合| 久久青青草综合| 性欧美.com| 亚洲一区高清| 亚洲综合国产| 亚洲精品中字| 91嫩草在线| 亚洲一区二区在线观| 久久久久久久久久码影片| 日韩少妇中文字幕| 欧美亚洲三级| 午夜国产一区| 国产免费一区二区| 91久久精品国产91久久性色tv| 国产三区精品| 亚洲精品免费观看| 午夜视频久久久| 巨乳诱惑日韩免费av| 欧美视频一区| 日本午夜精品电影| 97中文在线| 亚洲无线视频| 日本一区视频在线播放| 免费看亚洲片| 欧美日韩少妇| 日韩成人av网站| 成人午夜电影免费在线观看| 亚洲国产欧洲综合997久久| 欧美裸体网站| 3d动漫啪啪精品一区二区免费| 欧美久久综合| 日韩伦理一区二区三区av在线| 97免费资源站| 亚洲欧美日本日韩| 在线观看一区欧美| 一区二区三区久久网| 精品综合久久久| 成人三级视频在线观看一区二区| 亚洲国产精品毛片| 欧美一区二区| 无码免费一区二区三区免费播放| 国产精品18毛片一区二区| 国产精品亚洲综合色区韩国| 欧美日韩免费观看一区| 日韩成人av网站| 牛人盗摄一区二区三区视频| 国产91一区二区三区| 噜噜噜噜噜久久久久久91| 99伊人成综合| 一区二区三区四区五区精品| 欧美三级在线| 欧美日韩视频在线一区二区观看视频 | 夜夜嗨网站十八久久| 亚洲图片在线观看| 欧美区日韩区| 欧美三级不卡| 国产精品久久| 韩国亚洲精品| 亚洲国产导航| 99热免费精品| 亚洲一区二区毛片| 69174成人网| 国产精品免费一区二区三区四区 | 国产精品制服诱惑| 精品视频在线观看| 欧美婷婷久久| 一区二区精品国产| 欧美国产另类| 亚洲精品社区| 蜜桃伊人久久| 激情小说综合网| 色涩成人影视在线播放| 欧美99在线视频观看| 国产主播一区二区三区四区| 尤物网精品视频| 久久久久网址| 久久99精品久久久久久久青青日本| 久久久神马电影| 中国成人亚色综合网站| 国产精品分类| 性欧美videos另类喷潮| 国产日韩精品推荐| 亚洲精品久久久久久一区二区| 欧美国内亚洲| 亚洲在线免费| 欧美日本亚洲| 亚洲午夜精品久久久久久app| 亚洲黄色在线| 国产欧美日韩综合一区在线观看| 欧美精品与人动性物交免费看| 亚洲成色www久久网站| 亚洲福利精品| 国产精品视频免费一区二区三区| 美女亚洲精品| 亚洲国产精品久久久久婷婷老年| 麻豆91精品| 日本一区二区三区免费看| 国内一区二区在线视频观看 | 日本高清不卡三区| 在线精品亚洲一区二区| 久久天天狠狠| 正义之心1992免费观看全集完整版| 日韩亚洲视频在线| 国产视频在线观看一区| 欧美黄色一区| 国产精品美女黄网| 欧美午夜欧美| 久久精品国产第一区二区三区最新章节| 一级二级三级欧美| 91视频网页| 亚洲午夜久久久久久尤物| 久久综合伊人| 欧美日韩视频在线一区二区观看视频 | 中文字幕一区综合| 久久国产精品亚洲va麻豆| 天堂精品一区二区三区| 欧美亚洲免费| 欧美特黄视频| 你懂的网址一区二区三区| 国产美女诱惑一区二区| 亚洲激情一区二区| 国产精品一区二区三区不卡| 国产一区欧美| 色一情一乱一伦一区二区三区丨| 美女诱惑一区| 亚洲福利久久| 欧美一区1区三区3区公司| 狠狠色噜噜狠狠狠狠色吗综合| 尹人成人综合网| 亚洲精品日韩精品| 久久精品日产第一区二区三区精品版 | 久久精品国产理论片免费| 国产精品一区二区三区观看| 亚洲精品一区二区三区av| 极品尤物一区二区三区| 久久精品日韩欧美| 国产亚洲激情| 亚洲经典在线看| 欧美/亚洲一区|