Maison >développement back-end >tutoriel php >Le principe du démarrage de l'outil TableManager+Cache par easyswoole

Le principe du démarrage de l'outil TableManager+Cache par easyswoole

little bottle
little bottleavant
2019-04-26 15:07:233092parcourir

Le contenu principal de cet article est de décrire le code easyswoole pour comprendre comment démarrer TableManager et le principe de l'outil Cache. Il a une certaine valeur de référence et les amis intéressés doivent le comprendre.

EasySwoole est un framework PHP résidant en mémoire développé sur la base de Swoole Server. Il est conçu pour les API et élimine la perte de performances causée par le mode de fonctionnement PHP traditionnel lors de l'activation des processus et du chargement des fichiers. EasySwoole encapsule fortement Swoole Server tout en conservant les fonctionnalités d'origine de Swoole Server. Il prend en charge la surveillance mixte des protocoles HTTP, TCP personnalisés et UDP en même temps, permettant aux développeurs d'écrire des applications multi-processus, asynchrones et hautement disponibles avec le plus bas niveau possible. coût et effort d’apprentissage.

swoole_table est une structure de données simultanée ultra-haute performance basée sur la mémoire partagée et les verrous. Utilisé pour résoudre les problèmes de partage de données multi-processus/multi-thread et de verrouillage synchrone.

TableManager fait principalement les choses suivantes
ajouter une méthode
S'il y a ce nom de table dans le tableau $list ($name est un nom de table ou un nom de collection), initialisez swoole_table puis configurez Créer un un tableau de types de champs

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;
}

méthode get
renvoie directement une instance de swoole_table.

Il existe de nombreux endroits pour l'utiliser
Comme mentionné précédemment, lorsque le système définit le composant Cache Cache::getInstance(), la

méthode de construction effectue les choses suivantes

$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 est également un concept très important. En fait, il s'agit d'un outil de gestion de la cartographie des tâches.

Ici vous pouvez voir ProcessManager::getInstance()->addProcess($this->generateProcessName($i),CacheProcess::class)

En fait, ici est passé ProcessManager permet au service swoole d'ajouter un processus. Méthode addProcess de swoole, lien vers le document https://wiki.swoole.com/wiki/page/390.html

Expliquons brièvement la méthode définie de Cache à l'avance pour approfondir le concept.

//讲解一下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和它的相关作用.
}

Tutoriels associés : Tutoriel vidéo PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer