這篇文章給大家分享的是有關(guān)easyswoole啟動(dòng)TableManager+Cache工具的原理是什么的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了忠縣免費(fèi)建站歡迎大家使用!
EasySwoole 是一款基于Swoole Server 開發(fā)的常駐內(nèi)存型PHP框架,專為API而生,擺脫傳統(tǒng)PHP運(yùn)行模式在進(jìn)程喚起和文件加載上帶來的性能損失。EasySwoole 高度封裝了Swoole Server 而依舊維持Swoole Server 原有特性,支持同時(shí)混合監(jiān)聽HTTP、自定義TCP、UDP協(xié)議,讓開發(fā)者以最低的學(xué)習(xí)成本和精力編寫出多進(jìn)程,可異步,高可用的應(yīng)用服務(wù)。
swoole_table一個(gè)基于共享內(nèi)存和鎖實(shí)現(xiàn)的超高性能,并發(fā)數(shù)據(jù)結(jié)構(gòu)。用于解決多進(jìn)程/多線程數(shù)據(jù)共享和同步加鎖問題。
TableManager主要做了下面幾件事
add方法
如果$list數(shù)組中有這個(gè)表名($name是一個(gè)表名或者叫做集合名),就初始化swoole_table,然后配置的字段類型數(shù)組進(jìn)行創(chuàng)建
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的實(shí)例。
使用的地方有很多
前文提到的在系統(tǒng)設(shè)置Cache組件 Cache::getInstance()的時(shí)候
構(gòu)造方法做了如下事情
$num = intval(Config::getInstance()->getConf("EASY_CACHE.PROCESS_NUM"));//Config默認(rèn)配置是1,如果配置為小于等于0則不開啟Cache if($num <= 0){ return; } $this->cliTemp = new SplArray(); //若是在主服務(wù)創(chuàng)建,而非單元測試調(diào)用 if(ServerManager::getInstance()->getServer()){ //創(chuàng)建table用于數(shù)據(jù)傳遞 TableManager::getInstance()->add(self::EXCHANGE_TABLE_NAME,[ 'data'=>[ 'type'=>Table::TYPE_STRING, 'size'=>10*1024 ], 'microTime'=>[ 'type'=>Table::TYPE_STRING, 'size'=>15 ] ],2048); //創(chuàng)建了一個(gè)__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也是一個(gè)很重要的概念。其實(shí)就是一個(gè)管理任務(wù)映射的工具。
這里可以看到ProcessManager::getInstance()->addProcess($this->generateProcessName($i),CacheProcess::class)
其實(shí)這里是通過ProcessManager,讓swoole服務(wù)添加了一個(gè)進(jìn)程。swoole的addProcess方法,文檔鏈接https://wiki.swoole.com/wiki/page/390.html
提前略帶講解一下Cache的set方法加深概念
//講解一下Cache的set方法加深概念 if(!ServerManager::getInstance()->isStart()){//兼容測試模式。也就是不開啟服務(wù)的情景下直接是clitemp中取緩存數(shù)據(jù) $this->cliTemp->set($key,$data); } if(ServerManager::getInstance()->getServer()){ $num = $this->keyToProcessNum($key);//這里是通過key然后hash到應(yīng)該投放的Cache進(jìn)程中去。 $msg = new Msg(); $msg->setCommand('set'); $msg->setArg('key',$key); $msg->setData($data); //下面一句話還是挺復(fù)雜的,根據(jù)key名hash到ProcessManager對(duì)應(yīng)的映射,然后獲取到swoole_process的實(shí)例,以swoole的write函數(shù)向管道內(nèi)寫入數(shù)據(jù)。 ProcessManager::getInstance()->getProcessByName($this->generateProcessName($num))->getProcess()->write(\swoole_serialize::pack($msg)); //在寫完數(shù)據(jù)后,在CacheProcess的onReceive方法中可以看到對(duì)應(yīng)setCommand的操作細(xì)節(jié)。其實(shí)數(shù)據(jù)都被寫到了一個(gè)Arr數(shù)組中。下篇接著講一下Cache的實(shí)現(xiàn)細(xì)節(jié)。這節(jié)還是主要講TableManager和它的相關(guān)作用. }
感謝各位的閱讀!關(guān)于easyswoole啟動(dòng)TableManager+Cache工具的原理是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
網(wǎng)站題目:easyswoole啟動(dòng)TableManager+Cache工具的原理是什么
文章URL:http://chinadenli.net/article6/gioiog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站營銷、網(wǎng)站維護(hù)、網(wǎng)站排名、App設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)