安装
easySwoole 项目依赖于 Swoole 扩展,在使用 easySwoole 之前需要先安装 swoole 扩展。
在 github 下载 swoole 源码,终端进入到 swoole 扩展目录,执行 /path/to/phpize && ./configure && make && make install
安装 swoole 扩展,安装完成之后编辑 php.ini 文件,加入 extenstion=swoole.so
。最后执行 /path/to/php -m
看到 swoole 则说明扩展安装成功。
安装完 swoole 之后,从 easySwoole 下载源码,下载下来之后目录结构如下
├── example
├── src
├── ide-helper
└── .htaccess-apache
其中,src
目录中的内容为项目需要的,目录结构如下 :
├── App
├── Conf
├── Core
├── server.php
└── unitTest.php
整个项目的业务代码应该都在 src/App
和 src/Conf
下。进入 src
下面执行 path/to/php server.php start
启动 easySwoole。在浏览器输入 ip:9501/
可以看到欢迎使用语说明安装成功。
VS LAMP
使用 easySwoole 和传统的 LAMP 模式最大不同的地方在于整个 easySwoole 是常驻内存的,所以 PHP 守护进程和普通的 web 程序在变量的生命周期,内存管理方式等方面完全不同。针对一些萌新的 PHPer,给出以下的避坑指南:
- easySwoole 支持多进程,不同进程中的 PHP 变量是不共享。即使是
$_GET, $_POST
等全局变量,在 A 进程中被修改,并不会影响到 B 进程 - easySwoole 是常驻内存型的应用,所以不要在代码中编写
die, exit
等代码,这些代码会导致进程退出。这也是 easySwoole 不直接支持 composer 的原因,很多 composer 包中使用了很多 exit 代码,如果贸然使用可能会导致进程意外退出。 - 不要在代码中调用
sleep
等睡眠函数,除非你明确知道其作用和效果。使用sleep
等函数会导致进程阻塞。 - 使用
require_once, include_once
代替require, include
. 由于 easySwoole 是常驻内存,所以加载 php 文件之后不会释放,因此一定要使用*_once
来避免多次加载同一个文件,否则会发生cannot redeclare function/class
的错误。 - PHP 代码中如果有异常抛出,必须在回调函数中进行
try/catch
捕获异常,否则会导致工作进程退出。 - 不要使用
echo, var_dump
函数进行输出,使用框架中的$this->response()->write()
代替。因为 easySwoole 的输出对象可能是 web 或者 cli.
约定规范
- 准项目中类名称与类文件(文件夹)命名,均为大驼峰,变量与类方法为小驼峰。
- Core 目录为框架核心目录,Conf 目录为系统配置目录,默认应用目录为 App。
- 框架中使用了大量的单例模式,包括
Request, Response, Config, Di, AutoLoader
等对象,请勿手动创建。
配置文件
所有的配置均在 Conf/Config.php
中以数组的形式表现。配置分为系统配置(sysConf)和用户自定义配置(userConf)两种,下面是部分的系统配置 :
return [
"SERVER" => [
"LISTEN" => "0.0.0.0",
"SERVER_NAME" => "",
"PORT" => 9501,
"WS_SUPPORT" => false,
"CONFIG" => [
'task_worker_num' => 4, //异步任务进程
"task_max_request" => 10,
'max_request' => 3000,
'worker_num' => 4,
],
],
"DEBUG" => [
"LOG" => 1,
"DISPLAY_ERROR" => 1,
"ENABLE" => false,
],
];
每个配置项的含义如下:
LISTEN
, 配置 server 监听的 IP 地址。SERVER_NAME
, 为当前 server 配置一个名称。PORT
, 配置 Server 监听的端口WS_SUPPORT
, 是否开启 Websocket 的支持。CONFIG
, 这个配置项为一个数组。为 swoole 扩展定义的配置,包括 worker 进程数、task 进程数等等配置。如果需要对 swoole 定义的配置进行设置,可以修改这个数组。更多 swoole 配置相关的内容见 swoole 文档DEBUG['ENABLE']
,是否开启 Debug 模式,当这个值为 false, 那么DEBUG['LOG']
和DEBUG['DISPLAY_ERROR']
配置无效。
用户自定义配置可以在 Config/Config.php
中的 userConf
函数中添加。每个配置项以 key=>value
的形式添加。
运行中要获取/设置配置项请使用 Config::getInstance()->getConf()
和 Config::getInstance()->setConf()。getConf
和 setConf
都支持 .
操作,例如要获取到 PORT 的值,可以使用 Config::getInstance()->getConf('SERVER.PORT')
来获取。