feehi / yii2-swoole
让yii2在swoole上运行
0.1.4
2021-11-03 00:55 UTC
Suggests
- feehi/yii2-swoole: Need extension swoole version >= 1.9;Recommend with php >= 7
README
无需修改代码,即可让yii2运行在swoole上。
演示站点
可参考FeehiCMS(CMS系统)
前置说明
- 有使用yii2-advanced-app的经验
- 了解并使用过swoole,如果没有请先阅读swoole的文档
- 强烈建议先阅读并实践以下文章来理解yii2和swoole结合的两种方式 https://www.jianshu.com/p/9c2788ccf3c0
- 在完成123并使用过yii2-swoole后,可以去了解swoft,对比一下为协程设计的框架与yii2的区别
安装
-
使用composer安装,以及国内镜像设置,请点击此处
$ cd /path/to/yii2-app $ composer require "feehi/yii2-swoole" $ composer install -vvv
配置yii2
打开console/config/main.php,在最外层配置中加入如下配置。(注意:不是配置在components里面,而应该在最外层,即与components同级)。完整示例
'id' => 'app-console', ...//其他配置 'controllerMap'=>[ ...//其他配置项 'swoole-backend' => [ 'class' => feehi\console\SwooleController::class, 'rootDir' => str_replace('console/config', '', __DIR__ ),//yii2项目根路径 'app' => 'backend', 'host' => '127.0.0.1', 'port' => 9998, 'web' => 'web',//默认为web。rootDir app web目的是拼接yii2的根目录,如果你的应用为basic,那么app为空即可。 'debug' => true,//默认开启debug,上线应置为false 'env' => 'dev',//默认为dev,上线应置为prod 'swooleConfig' => [ 'reactor_num' => 2, 'worker_num' => 4, 'daemonize' => false, 'log_file' => __DIR__ . '/../../backend/runtime/logs/swoole.log', 'log_level' => 0, 'pid_file' => __DIR__ . '/../../backend/runtime/server.pid', ], ] ...//其他配置 ] ...//其他配置
启动命令
* 启动 /path/to/php /path/to/yii swoole-backend/start
* 关闭 /path/to/php /path/to/yii swoole-backend/stop
* 重启 /path/to/php /path/to/yii swoole-backend/restart
使用systemd管理yii2-swoole的启动和关闭
使用service httpd start和service httpd stop以及service httpd restart来启动、关闭、重启yii2 swoole服务。
1. 复制feehi.service和feehi-backend.service到/etc/systemd/system目录
2. 分别修改feehi.service和feehi-backend.service中[Service]部分的 /path/to/yii2app为你的目录,/path/to/php为你的php命令绝对路径
3. 运行systemctl daemon-reload
添加开机自动启动
方法一
1. 使用systemd管理服务
2. 运行systemctl enable feehi以及systemctl enable feehi-backend设置开机自动启动
方法二
在/etc/rc.local中加入
/path/to/php /path/to/yii2app/yii swoole-backend/start
Nginx配置
虽然swoole从1.9.17版本以后支持作为静态资源web服务器,但强烈推荐配合nginx使用,将swoole仅作为应用服务器。
* * 后台 * server { set $web /www/cms-swoole/backend/web; root $web; server_name swoole-admin.cms.test.docker; location ~* .(ico|gif|bmp|jpg|jpeg|png|swf|js|css|mp3)$ { root $web; } location / { proxy_http_version 1.1; proxy_set_header Connection "keep-alive"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host http://swoole-admin.cms.test.docker; proxy_pass http://127.0.0.1:9998; } }
调试
调试
var_dump、echo都是输出到控制台,不方便调试。可以使用\feehi\swoole\Util::dump(),输出数组、对象、字符串、布尔值到浏览器
日志
已经修复
关于logger为何要替换的原因参见这篇文章详解: https://zguoqiang.com/2018/12/17/swoole%E5%9F%BA%E7%A1%80-%E4%B8%8E%E4%BC%A0%E7%BB%9FMVC%E6%A1%86%E6%9E%B6%E7%9A%84%E6%95%B4%E5%90%88/