easySwoole 项目已经带有很多示例代码,不熟悉的同学可以 clone 项目,拷贝 example 文件夹中的 App 和 Conf 目录替换 src 中的 App 和 Conf,就可以直接运行 easySwoole。 启动
easySwoole 不依赖 Apache/Nginx, 自带 HttpServer 功能,进入项目根目录,执行 php server.php start 就可以启动 easySwoole。easySwoole 只有三个命令参数 : start(启动), stop(停止), reload(重载)
在启动 easySwoole 的时候也可以指定一些配置参数,通过执行 php server.php --start help 可以查看所有参数和具体的参数含义。
➜ swoole php server.php --start help
执行php server.php start 即可启动服务。启动可选参数为:
--daemonize-boolean 是否以系统守护模式运行
--port-portNumber 指定服务监听端口
--pidFile-fileName 指定服务PID存储文件
--SwooleLog-fileName 指定Swoole日志文件
--workerNum-num 设置worker进程数
--taskWorkerNum-num 设置Task进程数
--user-userName 指定以某个用户身份执行
--group-groupName 指定以某个用户组身份执行
--taskWorkerNum-num 设置Task进程数
--cpuAffinity-boolean 是否开启CPU亲和
同样,如果是 stop, reload 一样可以指定配置参数。
这里注意一点,easySwoole 属于常驻内存的应用,当修改代码之后要重启 easySwoole 代码才能生效。
路由
pathinfo
easySwoole 默认使用 pathinfo 模式(即 module/controller/action
的 URL 形式)的路由规则。假设有 URL http://domain/api/index.html
, 则匹配规则如下:
- 先搜索
App/Controller/Api/Index
控制器,action 为 index. - 不匹配则搜索
App/Controller/Api
控制器,action 为 index. - 若也不匹配则尝试搜索
App/Controller/Index
控制器,action 为 api. easySwoole 并不定要使用 .html 的伪静态 URL。当 URL 为 http://domain/api/index 的时候也可被匹配。
easySwoole 支持自定义 URL 匹配的深度,默认为 module/controller/action
的 3 级深度。如果你希望 easySwoole 支持 URL 为 http://domain/api/admin/user/login
这种更深层级的 URL,那么需要在 config/Event.php
的 frameInitialize
函数中使用 Di 来为
自定义路由
除了支持 pathinfo 模式的 URL, easySwoole 也支持自定义 url 的形式。easySwoole 并没有实现这个功能,而是在底层调用了 FastRoute
这个第三方库来实现。如果你想要使用自定义 URL 的形式,那么只要在 App/ 下新建一个 Router类,并且继承 AbstractRouter
类,实现 addRouter
方法。在 addRouter
里面添加你要自定义的 URL.
function addRouter(RouteCollector $routeCollector)
{
// 在 AddRouter 里面添加自定义路由规则
$routeCollector->addRoute(['GET','POST'],"/router",function (){
$this->response()->write("match router now");
$this->response()->end();
});
}
如果你钟情于自定义路由规则的使用方式,可以查看 FastRoute 文档。
控制器
控制器命名空间前缀统一为 {$APPLICATION_DIR}\Controller
,并且所有控制器都应该继承 Core\AbstraceInterface\AbstractController
.
所有控制器都需要实现 AbstractController
的四个抽象方法
index
: 默认的 action 方法,当 URL 中无法解析出 actionName 的时候默认执行该方法,例如有 Test 控制器, URL 为http://domain/test
的时候,默认解析 index 。onRequest
: 当一个 URL 请求被解析完成之后,在执行 action 之前先执行 onRequest 函数。在这个函数里面可以对请求做预处理,比如权限过滤之类的操作。actionNotFound
: 当 URL 解析出 actionName,但是控制器中无对应函数,则执行actionNotFound
函数。afterAction
:action 方法执行完毕之后 easySwoole 会调用该函数。可以在这个函数中做一些善后操作。
Request && Response
Request 对象在系统中以单例形式存在,在收到客户端的 HTTP 请求之后自动创建,响应结束之后自动销毁,用户请勿手动创建。easySwoole 建议用户使用 Request 来获取 post/get 等数据信息。
Request 所支持的部分常用方法 :
getInstance()
: 获取 Request 实例。getRequestParam($keyOrkeys = null)
: 获取 get/post 参数,函数参数可以是字符串获取数组,easySwoole 可以根据参数类型自动解析。getCookieParams($name=null)
:获取 cooike 数据。如果缺省参数,则获取所有。getHeader($name)
: 获取 http 请求的 header 信息。getProtocolVersion()
: 获取 http 协议版本,该值通常为 1.1。getMethod()
: 获取 http 请求方法。
可以获取 Request 属性的值,那么肯定有函数可以设置该属性的值,easySwoole 除了 get*
系列函数用于获取属性值之外,使用 with*
系列的函数用于设置 Request 对象一系列属性的值。
Response 有若干和 Request 一样的函数名,其作用和 Request 中的函数一样。除了 get*
和 with*
系列函数之外,Response 还提供了以下方法 :
end()
: 结束一个 http 请求。这意味着,调用该函数之后,就不能进行写 cookie,返回数据等操作。isEndResponse()
: 判断当前 http 请求是否已经结束。即是否调用过end()
函数。writeJson($statusCode = 200, $result = null, $msg = null)
: 返回 json 数据。redirect($url)
: 重定向函数。