easyswoole 启动TableManager+Cache工具的原理-php教程

资源魔 39 0
本篇文章的次要内容是讲述easyswoole代码来理解若何启动TableManager,和Cache对象的原理,具备肯定的参考代价,感兴味的冤家肯定要理解一下。

EasySwoole 是一款基于Swoole Server 开发的常驻内存型PHP框架,专为API而生,解脱传统PHP运转模式正在过程唤起以及文件加载上带来的功能丧失。EasySwoole 高度封装了Swoole Server 而照旧维持Swoole Server 原有特点,支持同时夹杂监听HTTP、自界说TCP、UDP协定,闪开发者以最低的学习老本以及精力编写出多过程,可异步,高可用的使用效劳。

swoole_table一个基于同享内存以及锁完成的超高功能,并发数据构造。用于处理多过程/多线程数据同享以及同步加锁成绩。

TableManager次要做了上面几件事
add办法
假如$list数组中有这个表名($name是一个表名或许叫做荟萃名),就初始化swoole_table,而后设置装备摆设的字段类型数组进行创立

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组件 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,[
        'data'=>[
            'type'=>Table::TYPE_STRING,
            'size'=>10*1024
        ],
        'microTime'=>[
            'type'=>Table::TYPE_STRING,
            'size'=>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->setCo妹妹and('set');
    $msg->setArg('key',$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办法中能够看到对应setCo妹妹and的操作细节。其实数据都被写到了一个Arr数组中。下篇接着讲一下Cache的完成细节。这节仍是次要讲TableManager以及它的相干作用.
}

相干教程:PHP视频教程

以上就是easyswoole 启动TableManager+Cache对象的原理的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 easyswoole TableManage Cache

抱歉,评论功能暂时关闭!