Heim  >  Artikel  >  Backend-Entwicklung  >  Das Prinzip von easyswoole beim Starten des TableManager+Cache-Tools

Das Prinzip von easyswoole beim Starten des TableManager+Cache-Tools

little bottle
little bottlenach vorne
2019-04-26 15:07:233061Durchsuche

Der Hauptinhalt dieses Artikels besteht darin, den Easyswoole-Code zu beschreiben, um zu verstehen, wie TableManager gestartet wird, und das Prinzip des Cache-Tools. Er hat einen gewissen Referenzwert und interessierte Freunde müssen ihn verstehen.

EasySwoole ist ein speicherresidentes PHP-Framework, das auf Basis von Swoole Server entwickelt wurde. Es wurde für APIs entwickelt und beseitigt den Leistungsverlust, der durch den herkömmlichen PHP-Betriebsmodus beim Prozessstart und beim Laden von Dateien verursacht wird. EasySwoole kapselt Swoole Server in hohem Maße und behält gleichzeitig die ursprünglichen Funktionen von Swoole Server bei. Es unterstützt gleichzeitig die gemischte Überwachung von HTTP-, benutzerdefinierten TCP- und UDP-Protokollen, sodass Entwickler asynchrone und hochverfügbare Multiprozessanwendungen mit geringstem Aufwand schreiben können Lernaufwand und Aufwand.

swoole_table ist eine extrem leistungsstarke, gleichzeitige Datenstruktur, die auf gemeinsam genutztem Speicher und Sperren basiert. Wird zur Lösung von Problemen bei der Datenfreigabe bei mehreren Prozessen/Multithreads und bei der synchronen Sperrung verwendet.

TableManager macht hauptsächlich die folgenden Dinge
Methode hinzufügen
Wenn sich dieser Tabellenname im $list-Array befindet ($name ist ein Tabellenname oder Sammlungsname), initialisieren Sie swoole_table und konfigurieren Sie dann Create an Array von Feldtypen

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-Methode
gibt direkt eine Instanz von swoole_table zurück.

Es gibt viele Orte, an denen es verwendet werden kann
Wie bereits erwähnt, führt die

-Konstruktionsmethode die folgenden Dinge aus, wenn das System die Cache-Komponente Cache::getInstance() festlegt

$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 ist auch ein sehr wichtiges Konzept. Tatsächlich handelt es sich um ein Tool zur Verwaltung der Aufgabenzuordnung.

Hier sehen Sie ProcessManager::getInstance()->addProcess($this->generateProcessName($i),CacheProcess::class)

In der Tat hier Wird übergeben, ermöglicht ProcessManager dem Swoole-Dienst das Hinzufügen eines Prozesses. swooles addProcess-Methode, Dokumentlink https://wiki.swoole.com/wiki/page/390.html

Lassen Sie uns im Voraus kurz die Set-Methode von Cache erklären, um sie zu vertiefen das Konzept.

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

Verwandte Tutorials: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDas Prinzip von easyswoole beim Starten des TableManager+Cache-Tools. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen