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');
} // Redis代理使用示例(主从)
} 代理就是在连接池的基础上进一步 搞事情. 以 主从 模式为例: 主从策略: 读主库,写从库 代理做的事情: 判断是读操作还是写操作,选择相应的库去执行 公共库 msf 推行 公共库 的做法,希望不同功能组件可以做到 可插拔,这一点可以看 laravel 框架和 symfony 框架,都由框架核心加一个个的 package 组成. 这种思想我是非常推荐的,但是仔细看 百度脑图 - php-msf 源码解读 这张图的话,就会发现类与类之间的依赖关系,分层/边界 做得并不好. 如果看过我之前的 blog - laravel源码解读 / blog - yii源码解读,进行对比就会感受很明显. 但是,这并不意味着 代码不好,至少功能正常的代码,几乎都能算是好代码. 从功能之外建立的 优越感,更多的是对 美好生活的向往 -- 还可以更好一点. AOP php AOP 扩展: http://pecl.php.net/package/aop PHP-AOP扩展介绍 | rango: http://rango.swoole.com/archives/83 AOP,面向切面编程,韩老大 的 blog - PHP-AOP扩展介绍 | rango 可以看看. 需不需要了解一个新事物,先看看这个事物有什么作用: AOP,将业务代码和业务无关的代码进行分离,场景有 日志记录 / 性能统计 / 安全控制 / 事务处理 / 异常处理 / 缓存 等等. 这里引用一段 程序员DD - 翟永超的公众号 文章里的代码,让大家感受下: 同样是 CRUD,不使用 AOP delete(long id,String lang) { Mapdata.put("code",99); 使用 AOP delete(long id) { return new ResultBean代码只用一行,需要的特性一个没少,你是不是也想写这样的 CRUD 代码? 配置文件管理 先明确一下配置管理的痛点: 是否支撑热更新,常驻内存需要考虑 考虑不同环境: dev test production 方便使用 热更其实可以算是常驻内存服务器的整体需求,目前 php 常用的解决方案是 inotify,可以参考我之前的 blog - swoft 源码解读 . (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |