php-msf源码详解
swoole 本身是实现了隔离的:on('request',$response) {
$response->end(" Hello Swoole. #".rand(1000,9999).""); }); $http->start();msf 在 Context 上还做了一层封装,让 Context 看起来 为所欲为: getContext()->xxxModule->xxxModuleFunction();细节可以查看 src/Helpers/Context.php 文件 对象池 对象池这个概念,大家可能比较陌生,目的是减少对象的频繁创建与销毁,以此来提升性能,msf 做了很好的封装,使用很简单: getObject(DemoModel::class,[1,2]);对象池的具体代码在 src/Base/Pool.php 下: 底层使用反射来实现对象的动态创建 if (!$poolName) { return null; } $pool = $this->map[$poolName] ?? null; if ($pool->count()) {
} 使用 SplStack 来管理对象map)) { throw new Exception('the name is exists in pool map'); } $this->map[$poolName] = new SplStack();return $this->map[$poolName]; 连接池 & 代理连接池 Pools连接池的概念就不赘述了,我们来直接看 msf 中的实现,代码在 src/Pools/AsynPool.php 下: callBacks = []; $this->commands = new SplQueue(); $this->pool = new SplQueue(); $this->config = $config; }这里使用的 SplQueue 来管理连接和需要执行的命令. 可以和上面对比一下,想一想为什么一个使用 SplStack,一个使用 SplQueue. 代理 Proxy代理是在连接池的基础上进一步的封装,msf 提供了 2 种封装方式: 主从 master slave 集群 cluster 查看示例 AppControllersRedis 中的代码: getRedisPool('p1')->set('key1','val1'); $val = yield $this->getRedisPool('p1')->get('key1');
} (编辑:网站开发网_安阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

