这篇文章给大家分享的是有关easyswoole启动TableManager +缓存工具的原理是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
easyswoole是一款基于Swoole服务器开发的常驻内存型PHP框架,专为API而生,摆脱传统PHP运行模式在进程唤起和文件加载上带来的性能损失.EasySwoole高度封装了Swoole服务器而依旧维持Swoole服务器原有特性,支持同时混合监听HTTP、自定义TCP、UDP协议,让开发者以最低的学习成本和精力编写出多进程,可异步,高可用的应用服务。
swoole_table一个基于共享内存和锁实现的超高性能,并发数据结构。用于解决多进程/多线程数据共享和同步加锁问题。
TableManager主要做了下面几件事
添加方法
如果美元数列表组中有这个表名(美元名称是一个表名或者叫做集合名),就初始化swoole_table,然后配置的字段类型数组进行创建
如果(!收取($ this→列表[名字]美元)){ (表=new表美元大小); foreach(列如美元列=比;$ item) { 表→美元列(列,项目美元[& # 39;类型# 39;],美元项目[& # 39;大小# 39;]); } 美元表→创建(); 美元这个→列表[名字]美元=$表; }
得到方法
,,直接返回swoole_table的实例。
使用的地方有很多
前文提到的在系统设置缓存组件缓存::getInstance()的时候
构造方法做了如下事情
$ num=intval中(配置::getInstance ()→getConf (“EASY_CACHE.PROCESS_NUM"));//配置默认配置是1,如果配置为小于等于0则不开启缓存 如果(num & lt;美元=0){ 返回; } $ this→cliTemp=new SplArray ();//若是在主服务创建,而非单元测试调用 如果(ServerManager:: getInstance ()→getServer ()) {//创建表用于数据传递 TableManager: getInstance()→添加(self:: EXCHANGE_TABLE_NAME, [ & # 39;数据# 39;=祝辞( & # 39;类型# 39;=祝辞表::TYPE_STRING, & # 39;大小# 39;=祝辞10 * 1024 ), & # 39;microTime& # 39;=祝辞( & # 39;类型# 39;=祝辞表::TYPE_STRING, & # 39;大小# 39;=祝辞15 ] ),2048);//创建了一个__Cache的swoole_table表,字段为10240年数据字符串,字符串microTime 15的表 $ this→processNum=$ num; (我=0;美元我& lt;num;美元我+ +){ ProcessManager: getInstance ()→addProcess ($ this→generateProcessName(我美元),CacheProcess::类); } }
ProcessManager也是一个很重要的概念。其实就是一个管理任务映射的工具。
这里可以看到ProcessManager:: getInstance ()→addProcess ($ this→generateProcessName(我美元),CacheProcess::类)
其实这里是通过ProcessManager,让swoole服务添加了一个进程.swoole的addProcess方法,文档链接https://wiki.swoole.com/wiki/page/390.html
提前略带讲解一组下缓存的方法加深概念
//讲解一组下缓存的方法加深概念 如果(! ServerManager: getInstance ()→isStart()){//兼容测试模式。也就是不开启服务的情景下直接是clitemp中取缓存数据 $ this→cliTemp→设置(键,美元数据); } 如果(ServerManager:: getInstance ()→getServer ()) { num=这→美元keyToProcessNum(键)美元;//这里是通过关键然后散列到应该投放的缓存进程中去。 味精美元=new味精(); 味精→美元setCommand(& # 39;集# 39;); 味精→美元setArg(& # 39;关键# 39;,美元键); 味精→美元setData(元数据);//下面一句话还是挺复杂的,根据键名散列到ProcessManager对应的映射,然后获取到swoole_process的实例,以swoole的写函数向管道内写入数据。 ProcessManager: getInstance ()→getProcessByName ($ this→generateProcessName (num)美元)→getProcess()→写(\ swoole_serialize:包(msg)美元);//在写完数据后,在CacheProcess的onReceive方法中可以看到对应setCommand的操作细节。其实数据都被写到了一个由数组中。下篇接着讲一下缓存的实现细节。这节还是主要讲TableManager和它的相关作用。 }
感谢各位的阅读!关于easyswoole启动TableManager +缓存工具的原理是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!