Download the PHP package lmz/thefair-skeleton without Composer
On this page you can find all versions of the php package lmz/thefair-skeleton. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download lmz/thefair-skeleton
More information about lmz/thefair-skeleton
Files in lmz/thefair-skeleton
Package thefair-skeleton
Short Description A coroutine framework that focuses on hyperspeed and flexible, specifically use for build microservices and middlewares.
License Apache-2.0
Informations about the package thefair-skeleton
Rpc Service 搭建说明文档
[TOC]
安装
仅可运行于 Linux 和 Mac 环境下,Windows 下也可以通过 Docker for Windows 来作为运行环境或虚拟机,通常来说 Mac 环境下,推荐本地环境部署
- PHP >= 7.2
- Swoole PHP 扩展 >= 4.4,并关闭了 Short Name
- OpenSSL PHP 扩展
- JSON PHP 扩展
- PDO PHP 扩展 (如需要使用到 MySQL 客户端)
- Redis PHP 扩展 (如需要使用到 Redis 客户端)
- Protobuf PHP 扩展 (如需要使用到 gRPC 服务端或客户端)
composer create-project lmz/thefair-skeleton test_service
本地配置文件 .env
安装包 composer up
启动服务开发 php dev_start.php -c
项目文件结构
配置文件结构
开发必读
不能通过全局变量获取属性参数
在 PHP-FPM
下可以通过全局变量获取到请求的参数,服务器的参数等,在 Hyperf
和 Swoole
内,都 无法 通过 $_GET/$_POST/$_REQUEST/$_SESSION/$_COOKIE/$_SERVER
等$_
开头的变量获取到任何属性参数。
通过容器获取的类都是单例
通过依赖注入容器获取的都是进程内持久化的,是多个协程共享的,所以不能包含任何的请求唯一的数据或协程唯一的数据,这类型的数据都通过协程上下文去处理,具体请仔细阅读 依赖注入 和 协程 章节。
框架生命周期
Hyperf
是运行于 Swoole
之上的,想要理解透彻 Hyperf
的生命周期,那么理解 Swoole
的生命周期也至关重要。
Hyperf
的命令管理默认由 symfony/console
提供支持(如果您希望更换该组件您也可以通过改变 skeleton
的入口文件更换成您希望使用的组件),在执行 php bin/hyperf.php start
后,将由 Hyperf\Server\Command\StartServer
命令类接管,并根据配置文件 config/autoload/server.php
内定义的 Server
逐个启动。
关于依赖注入容器的初始化工作,我们并没有由组件来实现,因为一旦交由组件来实现,这个耦合就会非常的明显,所以在默认的情况下,是由入口文件来加载 config/container.php
来实现的。
禁止注入 model,实现单例方法
可以使用 UserInfoModel::xxxx
方法,或make
,new
请求与协程生命周期
Swoole
在处理每个连接时,会默认创建一个协程去处理,主要体现在 onRequest、onReceive、onConnect
事件,所以可以理解为每个请求都是一个协程,由于创建协程也是个常规操作,所以一个请求协程里面可能会包含很多个协程,同一个进程内协程之间是内存共享的,但调度顺序是非顺序的,且协程间本质上是相互独立的没有父子关系,所以对每个协程的状态处理都需要通过 协程上下文 来管理。
路由
路由必须是三级,/m/c/a
http 服务使用 @AutoController
Rpc 服务使用 @RpcService
如 * @RpcService(name="v2/test", protocol="jsonrpc-tcp-length-check", server="json-rpc")
参数过滤
路由 /v2/test/get_test
对应 \App\Controller\V2\Test::getTest
方法
必须新建一个对应的 app/Request/V2/Test/GetTest.php
文件
生成命令:php bin/hyperf.php gen:request V2/Test/GetTest
input
可以获得GET|POST
参数,相当于$_REQUEST
app/Request/V2/Test/GetTest.php 源码
新增验证规则
mobile 国内手机号验证
'phone' => 'required|mobile'
str 对字符串进行编码
'phone' => 'required|str'
Model 模型
约束:只做数据库、缓存操作,不写业务逻辑,业务推荐写在 service 里面
分表自动创建模型
shardingId 方法
model 类中重写表名,原方法$this->db()->table($this->_getTableName($uid))
全局使用方式
sql 注入
demo 用例
上面这条 sql 可以使用参数过滤做来,如强转 int
上面这条 sql 传入的是一个字符串,如果用参数过滤很容易误杀,必须使用预处理查询
系统底层会监控 sql 语句,发现原生 sql 语法,自动报警
异常
普通异常
code 异常
empty 异常
新 api 访问 rpc 服务
hyperf service 服务之间的访问
配置文件 config/autoload/services.php
新建 RpcClient
访问
线上服务启动
systemd 管理
用于 centos 7
新建:/etc/systemd/system/user.service
sudo systemctl --system daemon-reload
supervisorctl 管理项目
编辑新复制出来的配置文件 /etc/supervisord.d/supervisord.conf
,并在文件结尾处添加以下内容后保存文件:
启动 Supervisor
使用 supervisorctl 管理项目