easyswoole 基础入坑,更多详细文档请参考
https://www.easyswoole.com/Cn/Preface/introduction.html
基础 基础环境需求
保证 PHP 版本大于等于 7.1 保证 Swoole 拓展版本大于等于 4.4.15 需要 pcntl 拓展的任意版本 使用 Linux / FreeBSD / MacOS 这三类操作系统 使用 Composer 作为依赖管理工具 Composer安装 1 2 composer require easyswoole/easyswoole=3.x php vendor/easyswoole/easyswoole/bin/easyswoole install
目录结构 EasySwoole 的目录结构是非常灵活的,基本上可以任意定制,没有太多的约束,但是仍然建议遵循下面的目录结构,方便开发
1 2 3 4 5 6 7 8 9 10 11 12 13 14 project 项目部署目录 ├─App 应用目录(可以有多个) │ ├─HttpController 控制器目录 │ │ └─Index.php 默认控制器 │ └─Model 模型文件目录 ├─Log 日志文件目录 ├─Temp 临时文件目录 ├─vendor 第三方类库目录 ├─composer.json Composer架构 ├─composer.lock Composer锁定 ├─EasySwooleEvent.php 框架全局事件 ├─easyswoole 框架管理脚本 ├─dev.php 开发配置文件 ├─produce.php 生产配置文件
配置 配置文件dev.php
https://www.easyswoole.com/Cn/QuickStart/config.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <?php return [ 'SERVER_NAME' => "EasySwoole", 'MAIN_SERVER' => [ 'LISTEN_ADDRESS' => '0.0.0.0', 'PORT' => 9501, 'SERVER_TYPE' => EASYSWOOLE_WEB_SERVER, 'SOCK_TYPE' => SWOOLE_TCP, 'RUN_MODEL' => SWOOLE_PROCESS, 'SETTING' => [ 'worker_num' => 8, 'reload_async' => true, 'max_wait_time'=>3 ], 'TASK'=>[ 'workerNum'=>4, 'maxRunningNum'=>128, 'timeout'=>15 ] ], 'TEMP_DIR' => '/tmp/easyswoole/', 'LOG_DIR' => null ];
服务名称查看
1 ps -ef | grep EasySwoole
配置文件操作类 配置功能由\EasySwoole\EasySwoole\Config
类完成。
配置加载 在easyswoole配置加载目前支持有三种方式
加载配置配置文件,如:默认的dev.php一样的配置文件 1 \EasySwoole\EasySwoole\Config::getInstance()->loadFile($file);
加载env配置文件 1 \EasySwoole\EasySwoole\Config::getInstance()->loadEnv($envfile);
加载数组 1 \EasySwoole\EasySwoole\Config::getInstance()->load($conf);
读取配置 读取单个配置信息 1 \EasySwoole\EasySwoole\Config::getInstance()->getConf($keyPath);
读取全部配置信息 1 \EasySwoole\EasySwoole\Config::getInstance()->getConf();
动态配置 1 \EasySwoole\EasySwoole\Config::getInstance()->setConf($keyPath,$data);
配置文件驱动方式 1 2 3 EasySwoole\Config\TableConfig EasySwoole\Config\SplArrayConfig
自定义,参考一下官方文档自定义config驱动写法 由于swoole是多进程的,如果使用SplArray方式存储,在单个进程修改配置后,其他进程将不会生效,使用swoole_table方式的则会全部生效,需要注意
助手函数 1 2 3 4 5 6 7 8 9 10 11 12 use EasySwoole\EasySwoole\Config as GlobalConfig; if (!function_exists("config")) { function config($name = '', $value = null) { $instance = GlobalConfig::getInstance(); if (is_null($value) && is_string($name)) { return $instance->getConf($name); } else { return $instance->setConf($name, $value); } } }
控制器 控制器的主要作用是request和response对象进行数据交互,详细的介绍,见官方文档:https://www.easyswoole.com/Cn/HttpServer/controller.html
主要继承EasySwoole\Http\AbstractInterface\Controller
类和其他的控制器类
定义控制器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <?php namespace App\HttpController; use EasySwoole\Http\AbstractInterface\Controller; class User extends Controller { public function onRequest(string $action): ?bool { $this->response()->write("this is user onRequest\n"); return true; } public function index() { $this->response()->write("this is user index\n"); } public function afterAction(string $actionName): void { $this->response()->write("this is afterAction\n"); } public function gc() { $this->response()->write("this is gc\n"); } public function onException(\Throwable $throwable): void { $this->response()->write($throwable->getMessage()); } public function actionNotFound(string $action) { $this->response()->write("404\n"); } }
控制器类文件的实际位置是
1 App/HttpController/User.php
访问格式:
1 http://127.0.0.1:9501/user/index
执行的结果
1 2 3 4 this is user onRequest this is user index this is afterAction this is gc
index
方法:是一个抽象方法,可以随意定义,但是导致的结果只会是路由变化,如方法名称是info
那么你访问的路由也就是/user/info
onRequest
方法:是来源父类的方法,是在请求该控制器该方法之前去执行,我们可以在这里放置权限管理,登录业务逻辑处理等操作afterAction
方法,来源于父类的方法,当控制器方法执行结束之后将调用该方法,可自定义数据回收等逻辑‘gc 方法将在执行方法
,afterAction
完之后自动调用,将控制器属性重置为默认值,关闭session
可自行覆盖实现其他的gc回收逻辑. onException
当控制器逻辑抛出异常时将调用该方法进行处理异常(框架默认已经处理了异常) 可覆盖该方法,进行自定义的异常处理。actionNotFound
当请求方法未找到时,自动调用该方法,可自行覆盖该方法实现自己的逻辑请求Request 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 $req = $this->request(); // 用于获取用户通过POST或者GET提交的参数 $data = $req->getRequestParam(); //获取cookies信息 $cookies = $req->getCookieParams(); //获取上传文件信息 $file = $req->getUploadedFile("img"); //获取多个文件信息 $file = $req->getUploadedFiles(); //获得get内容 $get = $req->getQueryParams(); //获得post内容 $post = $req->getParsedBody(); //获得raw内容 $content = $req->getBody()->__toString(); $raw_array = json_decode($content, true); //获得头部 $header = $req->getHeaders(); //获得server $server = $req->getServerParams(); //获得cookie $cookie = $req->getCookieParams();
响应Rseponse 1 2 3 4 5 6 7 8 9 10 // 向页面输出hello world 字符串,同时也只能传入字符串 $this->response()->write('hello world'); //重定向(可路由可外) $this->response()->redirect("/user"); // json数据 $this->writeJson(200,$data,'success'); {"code":200,"result":{},"msg":"success"}