【建议收藏】swoft的最佳实践
这是 web-api 开发的总结,如果使用 websocket 等服务的可能不适用,本章节会对一些规范、习惯,或者优化进行一些说明 一、安装 & 环境swoole 安装swoft 开发的环境最好是 mac(以下截图都是以 mac 环境下的) 以下安装代码是需要开启 openssl 扩展的,如果不需要可以直接 pecl install swoole 一路回车即可 $ brew info openssl -------------------- For compilers to find openssl you may need to set: export LDFLAGS="-L/usr/local/opt/openssl/lib" export CPPFLAGS="-I/usr/local/opt/openssl/include” * * * * * 复制 /usr/local/opt/openssl $ pecl install swoole * * * * * enable openssl support? [no] : yes --with-openssl-dir=/usr/local/opt/openssl 新手必备扩展sdebug,兼容 swoole 的 xdebug 分支(https://github.com/mabu233/sdebug) swoft 因为文档不够详细,有时候必须看源码,跟踪运行,断点调试必不可少 composer 扩展
Swoft 安装无特别,跳过composer create-project swoft/swoft swoft 二、配置修改,常用环境.env 配置新增
.env 文件是不提交到? 使用 .env 里的配置,在? 三、重要目录划分
对项目内部,公用的、公开的。 定义一个接口返回格式类 <?php namespace AppCommon; class Message { const EROR = 100; public static function ok():array { return ['code' => 0,'msg' => "ok",'data' => null]; } function success($data = []):$datafunction code(array $msg) { return ['code' => $msg[0],'msg' => $msg[1],1)">function error($msg = 'error',$code = self::EROR,1)">$data = []) { $code,1)">$msg,1)">]; } } 定义一个状态码类 <?/** * 状态码定义 * @package AppCommon */ Code { const Ok = [0,"ok"]; const Unknown = [1,"未知错误"const NotUsers = [2,"用户不存在"]; } 这样,所有接口都可以使用?
项目内部数据库操作类。例如用户操作 curd 就可以定一个?
跨模块数据定义,有一点像数据缓存层,但是?
外部项目和内部项目的对接层,也可以有小部分业务处理;例如:
数据库实体,由?
逻辑层,范围很广,上面 Model 不好分层的时候,就放到这里好了,所有代码都是有逻辑的…… 四、中间件swoft 不支持路由分组,所以只能判断路由,录入定义一个登录权限检查,因为少数一两个接口不用检查,只能声明一个全局中间件,再在中间内部判断如果是公开路由,就跳过 // 对外公开的接口 $path = $request->getUri()->getPath(); if (in_array($path,self::$publicAction)) { $response = $handler->handle($request); return $response; } 往请求赋值 像用 uid 等,因为所有接口都可以使用的,就是需要在中间件可以检查出来,可以直接赋值到请求对象 $request->uid = $token->uid; 如果某个请求使用的值,可以使用 psr 规范的? $request = $request->withAttribute('test','这是值') 如果你是新项目,可以使用? 五、调试断点调试如果有安装? 新增 phpStorm 断点启动, 在代码新增断点,在代码左侧行数旁边,鼠标点击,就可以新增 启动断点,点击小虫子图标 请求来到断点时候,就会自动停止,等待你点击下一步才可以继续运行 Sql 调试修改? 如果线上的测试环境,可以新增 Log::debug ($rawSql); ,把 sql 写到独立一个文件里,然后使用? 注意使用? 六、内存优化因为常驻内存,所有内存都是敏感的,不像 fpm,请求结束直接回收。常驻内存后,哪怕是临时对象,也要等缓冲区满了,php 才收拾垃圾的,能省一点是一点。
可以定义一个类 UserExcelData { public $uid; $username; } 赋值就可以节省 key 带来的消耗,对象赋值只是简单的属性地址赋值,key 本身字符串是省去的。 数据大时候,节省的内存非常可观,对比数组赋值,几十倍都有可能。 更多学习内容可以访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新) ? ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |