ホームページ  >  記事  >  バックエンド開発  >  easyswooleの起動原理 TableManager+Cacheツール

easyswooleの起動原理 TableManager+Cacheツール

little bottle
little bottle転載
2019-04-26 15:07:233057ブラウズ

この記事の主な内容は、TableManager の起動方法とキャッシュ ツールの原理を理解するための easyswoole コードを説明することであり、一定の参考価値があり、興味のある人は理解する必要があります。

EasySwoole は、Swoole Server に基づいて開発されたメモリ常駐型の PHP フレームワークで、API 用に設計されており、プロセスの起動やファイルの読み込みにおける従来の PHP 動作モードによって引き起こされるパフォーマンスの低下を取り除きます。 EasySwoole は、Swoole Server の元の機能を維持しながら、Swoole Server を高度にカプセル化し、HTTP、カスタマイズされた TCP、および UDP プロトコルの同時監視をサポートし、開発者が最小限の学習コストと労力でマルチプロセス、非同期、高可用性のアプリケーションを作成できるようにします。 。 仕える。

swoole_table は、共有メモリとロックに基づく超高性能の同時データ構造です。マルチプロセス/マルチスレッドのデータ共有と同期ロックの問題を解決するために使用されます。

TableManager は主に次のことを行います
add メソッド
$list 配列にこのテーブル名がある場合 ($name はテーブル名またはコレクション名)、swoole_table を初期化してから、Create を設定します。フィールドタイプの配列

if(!isset($this->list[$name])){
    $table = new Table($size);
    foreach ($columns as $column => $item){
        $table->column($column,$item['type'],$item['size']);
    }
    $table->create();
    $this->list[$name] = $table;
}

getメソッド
swoole_tableのインスタンスを直接返します。

これを使用する場所はたくさんあります
前述したように、システムがキャッシュ コンポーネント Cache::getInstance() を設定するとき、

構築メソッドは次のことを行います

$num = intval(Config::getInstance()->getConf("EASY_CACHE.PROCESS_NUM"));//Config默认配置是1,如果配置为小于等于0则不开启Cache
if($num <= 0){
   return;
}
$this->cliTemp = new SplArray();
//若是在主服务创建,而非单元测试调用
if(ServerManager::getInstance()->getServer()){
    //创建table用于数据传递
    TableManager::getInstance()->add(self::EXCHANGE_TABLE_NAME,[
        &#39;data&#39;=>[
            &#39;type&#39;=>Table::TYPE_STRING,
            &#39;size&#39;=>10*1024
        ],
        &#39;microTime&#39;=>[
            &#39;type&#39;=>Table::TYPE_STRING,
            &#39;size&#39;=>15
        ]
    ],2048);
    //创建了一个__Cache的swoole_table表,字段为 data String 10240,microTime String 15的表
    $this->processNum = $num;
    for ($i=0;$i < $num;$i++){
        ProcessManager::getInstance()->addProcess($this->generateProcessName($i),CacheProcess::class);
    }
}

ProcessManager も非常に重要な概念です。実際、これはタスク マッピングを管理するためのツールです。

ここでは、ProcessManager::getInstance()->addProcess($this->generateProcessName($i),CacheProcess::class)

実際にはここにあります。 ProcessManager が渡されると、swoole サービスがプロセスを追加できるようになります。 swooleのaddProcessメソッド、ドキュメントリンク https://wiki.swoole.com/wiki/page/390.html

Cacheのsetメソッドについて理解を深めるために事前に簡単に説明しておきます。

//讲解一下Cache的set方法加深概念
if(!ServerManager::getInstance()->isStart()){//兼容测试模式。也就是不开启服务的情景下直接是clitemp中取缓存数据
    $this->cliTemp->set($key,$data);
}
if(ServerManager::getInstance()->getServer()){
    $num = $this->keyToProcessNum($key);//这里是通过key然后hash到应该投放的Cache进程中去。
    $msg = new Msg();
    $msg->setCommand(&#39;set&#39;);
    $msg->setArg(&#39;key&#39;,$key);
    $msg->setData($data);
    //下面一句话还是挺复杂的,根据key名hash到ProcessManager对应的映射,然后获取到swoole_process的实例,以swoole的write函数向管道内写入数据。
    ProcessManager::getInstance()->getProcessByName($this->generateProcessName($num))->getProcess()->write(\swoole_serialize::pack($msg));
    //在写完数据后,在CacheProcess的onReceive方法中可以看到对应setCommand的操作细节。其实数据都被写到了一个Arr数组中。下篇接着讲一下Cache的实现细节。这节还是主要讲TableManager和它的相关作用.
}

関連チュートリアル: PHP ビデオ チュートリアル

以上がeasyswooleの起動原理 TableManager+Cacheツールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。