- PHP7+
- redis3.2+
- etcd3
- inotify
- swoole1.9.21+
- msgpack
- yaf3.0.4+
- yaconf1.0+
- yac2.0+
- redis3.0+
- Seaslog1.6+
- bcmath
- PDO
- pcre
- pcntl
- opcache
- imgick3.4+
- mongodb1.2+
- xdebug2.5+
- xhprof1.0+
- gcc4.8+ //php7编译用gcc4.8+会开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能提升
- 操作系统只支持linux,不支持windows,因为pcntl扩展,nohup,inotify只有linux才可用
- nginx建议使用版本大于1.9,因为1.9的nginx增加了stream模块,支持tcp反向代理和负载均衡
- favicon.ico请求不在框架内部做处理,建议配置nginx静态文件访问来实现获取该文件
- 建议单独设置一个文件服务模块用于处理文件上传,图片裁剪等功能
- 多服务器部署,必须确保服务端口对外开放,以避免服务模块跨服务器请求调用因端口未开放出现错误
- 框架内部模块之间请求调用全都不用cookie和session
- task任务投递不要投递到taskId=0的进程,该进程用于定时更新模块配置信息
- 对外部只开放api模块,需要获取其他模块的数据,通过发送rpc请求到其他模块获取数据
- api模块返回数据根据业务需求,既可以用控制器的SyResult对象,也可以直接在响应请求中直接设置数据
- api模块负责接受外部请求,返回响应数据,包括设置响应头,cookie等
- 非api模块返回数据统一用控制器的SyResult对象
- 非api模块不能设置响应头,cookie等信息,如需设置这些信息,将这些信息作为响应数据放到SyResult中,返回给api组装来间接设置响应头,cookie等
- 非api模块发送请求只有POST方式,不支持其他方式
- 图片上传请参考api模块Image控制器的uploadImageAction方法
- 微信,支付宝支付与回调处理请参考sy_order模块下的OrderDao文件
- 所有数据库表必须有且只能有单主键,不允许联合主键
- 拉取项目需要安装git和git-lfs,有部分文件是git-lfs上传
- libs_frame: 框架公共类目录
- libs_project: 项目公共类目录
- pidfile: 项目进程pid文件存放目录
- static: 静态文件目录
- yaconf: 框架配置文件目录,该目录内的配置文件为样例,使用时需要将配置文件移动到php.ini配置文件中yaconf.directory配置对应的目录下
- install: 框架环境搭建目录,存放了环境搭建需要的工具和脚本
- 其他目录: 项目模块目录,每一个目录对应一个项目模块
//前置命令,必须在开启服务之前运行
nohup etcd --listen-client-urls http://10.27.166.170:2379 --advertise-client-urls http://10.27.166.170:2379 >/dev/null & --启动etcd服务
//服务命令-启动服务
/usr/local/php7/bin/php helper_service_manager.php -s start-all
//服务命令-关闭服务
/usr/local/php7/bin/php helper_service_manager.php -s stop-all
//必须将helper_sytask.php文件加入到linux系统cron执行任务中
- SY_ROOT //框架根目录
- SY_PROJECT_LIBS_ROOT //项目公共类根目录
- SY_FRAME_LIBS_ROOT //框架公共类根目录
- SY_ENV //框架环境 dev:测试环境 product:生产环境
- SY_PROJECT //框架项目名称
- SY_LOG_PATH //框架日志目录
- SY_SERVER_IP //服务器IP
- SY_VERSION //框架版本号
- SY_MODULE //框架模块名称
- SY_API //框架API标识 true: 是对外的API接口 false:不是对外的API接口
- SY_REQUEST_MAX_HANDLING //服务同时处理的最大请求数量
- SY_RECONNECT_DB //框架数据库重连标识 true: 检测重连 false:不检测重连
请求地址: http://api.xxx.com/syinfo
请求地址: http://api.xxx.com/phpinfo
https://docs.mongodb.com/php-library/
https://github.com/apidoc/apidoc
tar -xvf node-v6.10.2-linux-x64.tar
mkdir /usr/local/nodejs
mv node-v6.10.2-linux-x64/ /usr/local/nodejs
vim /etc/profile
export NODE_HOME=/usr/local/nodejs/node-v6.10.2-linux-x64
export $PATH=$NODE_HOME/bin
source /etc/profile
npm config set registry "http://registry.npm.taobao.org"
sudo npm install apidoc -g
vim apidoc.json
{
"name": "SyApi",
"version": "1.0.0",
"description": "API文档",
"title": "API文档",
"url" : "http://localhost:8080/Index"
}
apidoc -i 项目根目录 -o 文档存放目录
//如果出现错误 SyntaxError: Use of const in strict mode
npm cache clean -f
npm install -g n
n stable
- 默认关闭了自动堆栈追踪和自动性能分析
- 开启堆栈追踪,如果是GET请求,必须在url上附带XDEBUG_TRACE参数,如果是POST请求,必须在请求体上附带XDEBUG_TRACE参数
- 开启性能分析,如果是GET请求,必须在url上附带XDEBUG_PROFILE参数,如果是POST请求,必须在请求体上附带XDEBUG_PROFILE参数
http://blog.csdn.net/why_2012_gogo/article/details/51170609
- KCacheGrind(Linux)
- QCacheGrind(Windows)
参考demo_xhprof.php文件
善用观察者模式来实现业务代码解耦,具体可参考邮件发送模块
请求地址带上签名参数,统一只在api模块做签名校验,签名参数如下:
- _sign: 签名值,由数字,字母组成的48位字符串
- 详情参见分支task
- https://github.com/swoole/php-cp //连接池扩展
- https://github.com/swoole/swoole-src/blob/master/examples/mysql_proxy_server.php //swoole版
- 详情参见文件: install/resources/nginx/helper_sywaf.md


