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.phpframeInitialize 函数中使用 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) : 重定向函数。

results matching ""

    No results matching ""