首页 php

easyswoole 基础入坑进行时

发布于: 2020-06-22

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配置加载目前支持有三种方式

  1. 加载配置配置文件,如:默认的dev.php一样的配置文件
1
\EasySwoole\EasySwoole\Config::getInstance()->loadFile($file);
  1. 加载env配置文件
1
\EasySwoole\EasySwoole\Config::getInstance()->loadEnv($envfile);
  1. 加载数组
1
\EasySwoole\EasySwoole\Config::getInstance()->load($conf);

读取配置

  1. 读取单个配置信息
1
\EasySwoole\EasySwoole\Config::getInstance()->getConf($keyPath);
  1. 读取全部配置信息
1
\EasySwoole\EasySwoole\Config::getInstance()->getConf();

动态配置

1
\EasySwoole\EasySwoole\Config::getInstance()->setConf($keyPath,$data);

配置文件驱动方式

1
2
3
EasySwoole\Config\TableConfig

EasySwoole\Config\SplArrayConfig
  1. 自定义,参考一下官方文档自定义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
  1. index方法:是一个抽象方法,可以随意定义,但是导致的结果只会是路由变化,如方法名称是info那么你访问的路由也就是/user/info
  2. onRequest方法:是来源父类的方法,是在请求该控制器该方法之前去执行,我们可以在这里放置权限管理,登录业务逻辑处理等操作
  3. afterAction方法,来源于父类的方法,当控制器方法执行结束之后将调用该方法,可自定义数据回收等逻辑‘
  4. gc 方法将在执行方法,afterAction完之后自动调用,将控制器属性重置为默认值,关闭session可自行覆盖实现其他的gc回收逻辑.
  5. onException当控制器逻辑抛出异常时将调用该方法进行处理异常(框架默认已经处理了异常)
    可覆盖该方法,进行自定义的异常处理。
  6. 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"}