类别:PHP教程 / 日期:2019-12-01 / 浏览:206 / 评论: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->setCommand('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要领中能够看到对应setCommand的操纵细节。实在数据都被写到了一个Arr数组中。下篇接着讲一下Cache的完成细节。这节照样主要讲TableManager和它的相干作用.
}

相干教程:PHP视频教程

以上就是easyswoole 启动TableManager+Cache东西的道理的细致内容,更多请关注ki4网别的相干文章!

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章