Download the PHP package api-swoole/skeleton without Composer
On this page you can find all versions of the php package api-swoole/skeleton. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download api-swoole/skeleton
More information about api-swoole/skeleton
Files in api-swoole/skeleton
Package skeleton
Short Description 基于swoole实现的一个轻量级框架,支持http、websocket、tcp、udp。
License
Informations about the package skeleton
赞助商
- 感谢JetBrains对本项目的支持!
(一).开始
1.1下载与安装
需要确保运行环境达到了以下的要求:
- PHP >= 7.4
- Swoole PHP 扩展 >= 4.5.2
- Redis PHP 扩展 (如需使用 Redis 客户端)
- PDO PHP 扩展 (如需使用 MySQL 客户端)
1.2通过 Composer 创建项目
1.3启动
支持 HTTP 服务、WebSocket 服务、tcp服务,项目根目录./apiswoole.php
执行命令。
(二).Hello World
2.1编写一个接口
在api-swoole框架中,业务主要代码在app目录中。里面各个命名空间对应一个子目录,项目的默认命名空间是App,创建项目后app目录中包含Common、Example、Ext三个子目录,Common目录存放函数的functions.php文件,Ext一般放置工具等。目录结构如下:
当项目需要新增接口时,先在./app/Example
目录中新建hello.php
文件,并用编辑器编辑代码。
2.2定义路由
在route/http.php
路由文件中定义项目路由,第一个参数为定义的浏览器访问地址,第二个参数@
前半部分为文件的完整命名空间,@
后半部分为在类中调用的具体方法。
2.3启动项目
在项目根目录下执行如下命令以非守护模式启动。
默认情况下监听本地的HTTP和websocket的9501端口,在cmd中出现如下输出信息表示项目启动成功。
2.4访问接口
在浏览器地址栏中输入定义的路由地址,地址组成http://ip网址:端口/定义的路由
。
http://127.0.0.1:9501/hello
请求成功返回数据默认json方式返回,包含默认的code、msg、data字段,data中数据为方法中返回的数据。
(三).反向代理(Nginx + Swoole 配置)
由于 Http\Server
对 HTTP
协议的支持并不完整,建议仅作为应用服务器,用于处理动态请求,并且在前端增加 Nginx
作为代理。(参考地址)
可以通过读取 $request->header['x-real-ip']
来获取客户端的真实 IP
(四).配置
4.1配置文件
默认config文件夹下包含conf.php、db.php、events.php三个文件,conf.php放置项目的配置信息,http、tcp、udp、websocket等配置。db.php负责配置MySQL、Redis连接,events.php负责定义定制特定事件注册监听,现支持workerStart、open、close、task、finish
事件注册 。可以通过DI()->config->get('conf.ws')
或者\Sapi\Di::one()->config->get('conf.ws')
方式读取配置信息。
4.2参数说明
4.3配置读取示例
项目启动时在apiswoole.php
已经默认注册服务。
例如配置信息为conf.php,结构为:
可以使用DI()->config->get('conf.tcp')
读取配置文件
返回数组数据结构:
(五).日志
根据PSR规范中详尽定义了日志接口,日志记录在./storage/log
目录中,按照每日生成对应日期.log
日志文件。目前支持以下几种日志记录:
- error: 系统异常类日记
- info: 业务纪录类日记
- debug: 开发调试类日记
- notice: 系统提示类日记
- waring: 系统致命类日记
日志系统使用:
./storage/log/20220906.log
目录下对应日志:
(六).HTTP/websocket服务器(参考地址)
WebSocket\Server
继承自 Http\Server,所以 Http\Server
提供的所有 API
和配置项都可以使用。请参考 Http\Server 章节。
- 设置了 onRequest 回调,
WebSocket\Server
也可以同时作为HTTP
服务器 - 未设置 onRequest 回调,
WebSocket\Server
收到HTTP
请求后会返回HTTP 400
错误页面
如若只想实现websocket服务器,则在./config/conf.php
配置中删除['request', \Sapi\Events::class, 'onRequest']
即可。
6.1HTTP/websocket服务器配置
HTTP/websocket服务器配置选项在./config/conf.php
中。具体配置信息可以参考Swoole文档配置选项。
6.2HTTP路由
HTTP 服务器的路由构建文件位于./route/http.php
中。声明具体的路由规则,第一个参数为定义的浏览器访问地址,第二个参数@
前半部分为文件的完整命名空间,@
后半部分为在类中调用的具体方法。
完整的URL地址组成http://ip网址:端口/定义的路由
。
构建基本路由只需要一个 URI 与一个 闭包
,提供了一个非常简单定义路由的方法:
6.3HTTP控制器
对应的控制器方法默认有两个参数 $request
和 $reponse
,关于 Request 和 Response 对象完整的介绍请查看 Swoole
文档:Http\Request 、 Http\Response
6.4接口参数规则
接口参数规则通过继承Api
类实现,具体的定义规则通过rule()
方法。
- 一维下标是接口类的方法名。
- 二维下标是接口参数名称。
- 三维下标
name
对应客户端传入的值require
表示值传入可选项,true
必须传入,false
非必须传入。type
传入类型,支持int
、string
、float
、bool
、array
、file
source
参数传入位置,支持get
、post
、header
message
接口参数提示信息
6.5websocket路由
websocket服务器的路由定义文件位于./route/websocket.php
中。声明具体的路由规则,第一个参数为定义的浏览器访问地址,第二个参数@
前半部分为文件的完整命名空间,@
后半部分为在类中调用的具体方法。
完整的URL地址组成ws://ip网址:端口
。
6.6websocket控制器
对应的控制器方法默认有两个参数 $server
和 $msg
,关于 $server
对象完整的介绍请查看 Swoole
文档:WebSocket\Server。 $msg
是客户端发送的数据信息。
补充:websocket客户端消息传入格式
客户端发送的数据信息,默认需以json格式传送,必须包含id、path、data三个字段。
id
字段消息体的唯一标识。path
字段是./route/websocket.php
路由声明的访问地址。data
字段是项目的具体消息参数,控制方法默认的$msg
。
控制器代码部分示例:
6.7websocket接口参数规则
接口参数规则通过继承Api
类实现,具体的定义规则通过rule()
方法。
- 一维下标是接口类的方法名。
- 二维下标是接口参数名称。
- 三维下标
name
对应客户端传入的值require
表示值传入可选项,true
必须传入,false
非必须传入。type
传入类型,支持int
、string
、float
、bool
、array
message
接口参数提示信息
6.8http勾子函数
Api
类内置了钩子函数userCheck
,HTTP控制器均可继承Api
类重载。例如可完成用户身份验证。
首先定义声明HttpBase.php
文件。
然后继承HttpBase.php
实现类重载,。
6.9websocket勾子函数
Api
类内置了钩子函数userWsCheck
,websocket控制器均可继承Api
类重载。例如可完成用户身份验证。
首先定义声明WsBase.php
文件。
然后继承WsBase.php
实现类重载,。
(七).TCP/UDP服务器
Server
可以监听多个端口,每个端口都可以设置不同的协议处理方式,例如 80 端口处理 HTTP 协议,9500 端口处理 TCP 协议,9502
端口处理 UDP 协议。SSL/TLS
传输加密也可以只对特定的端口启用。参考Swoole官方文档(多端口监听)
7.1TCP服务器配置
TCP服务器配置选项在./config/conf.php
中增加tcp
字段。具体配置信息可以参考Swoole文档TCP配置。
7.1UDP服务器配置
UDP服务器配置选项在./config/conf.php
中增加udp
字段。具体配置信息可以参考Swoole文档UDP配置。
(八).数据库
Swoole 开发组采用 Hook 原生 PHP 函数的方式实现协程客户端,通过一行代码就可以让原来的同步 IO 的代码变成可以协程调度的异步
IO,即一键协程化。Swoole
提供的 Swoole\Server 类簇
都是自动做好的,不需要手动做,参考 enable_coroutine
。具体内容可参考Swoole官网一键协程化
框架数据库引入simple-swoole
第三方拓展包具体详情可参考simple-swoole/db
8.1Redis
配置
Redis服务器配置选项在./config/db.php
中。
使用
项目中使用Redis
8.2MySQL
8.2.1配置
MySQL服务器配置选项在./config/db.php
中。
./app/Ext/Pool.php
配置连接池:
8.2.2Medoo
simple-swoole
集成了轻量级的 PHP 数据库框架 Medoo
,使用时需要继承 Simps\DB\BaseModel
,所以使用方法和 Medoo
基本一致,具体请查看 Medoo 的文档
唯一不同的是事务相关操作,在 Medoo 中是使用 action( $callback )
方法,而在本框架中也可以使用 action( $callback )
方法,另外也支持以下方法
事务示例
8.2.3使用
项目中使用,数据库表结构:
(九).addProcess
添加一个用户自定义的工作进程。此函数通常用于创建一个特殊的工作进程,用于监控、上报或者其他特殊的任务。具体内容可参考Swoole官网 addProcess
注意事项:
- 创建的子进程可以调用
$server
对象提供的各个方法,如getClientList/getClientInfo/stats
- 在
Worker/Task
进程中可以调用$process
提供的方法与子进程进行通信 - 在用户自定义进程中可以调用
$server->sendMessage
与Worker/Task
进程通信 - 用户进程内不能使用
Server->task/taskwait
接口 - 用户进程内可以使用
Server->send/close
等接口 - 用户进程内应当进行
while(true)
(如下边的示例) 或 EventLoop 循环 (例如创建个定时器) ,否则用户进程会不停地退出重启
使用示例
添加一个用户自定义的工作进程,在./config/conf.php
中增加process
配置,如下:
控制器示例:
(十).订制事件注册
框架已默认埋点workerStart、open、close、task、finish
五个订制事件注册。可根据具体的业务特征在对应的事件回调增加处理业务代码。./confg/events.php
,每个事件允许有多个回调
All versions of skeleton with dependencies
ext-swoole Version >=4.5.2
simple-swoole/db Version ^1.0
api-swoole/sapi Version v1.0.2