#碳素云基于Swoole的服务端框架
##功能
自动Session管理,通过集成SessionHandler来实现Session管理或通过session函数扩展实现
集成Model模型管理,移植TP的Model实现
自动缓存,基于Redis做缓存
环境要求:
1/Linux
2/php5.5+
扩展要求
swoole
redis
msgpack
json
fileinfo
pdo
pdo-mysql
mysqlnd
mysqli
注意事项
需要区分缓存级别,一个是应用CLI应用模式下的临时缓存,这部分缓存需要在每次启动服务时清空
一种是持久缓存,启动应用不需要清空,如Session
需要配置哪个接口接入的数据允许访问哪些模块的哪些类
IP限定功能,只允许哪个IP范围的客户端连接
cache方法如果要缓存临时缓存则用tmp_开头,清楚临时缓存的方法是cache('[cleartmp]')
LOG服务,使用TCP或者UDP协议,在引入框架时通过Config或者define定义日志服务地址。所有使用L方法输出的日志全部发送到这个服务器上。
TODO MySql连接池技术
自动构建分为三部分,
1、构建PDM构建目录信息等
PDM标记:
1:
#使用手册
目录
[一、环境依赖 1]
(#__RefHeading__605_584730065)
[Linux]
(#__RefHeading__607_584730065)下
[Windows]
(#__RefHeading__609_584730065)下
[二、项目创建 2]
(#__RefHeading__611_584730065)
[1]
(#__RefHeading__613_584730065)[
、创建启动文件,引入
SwooleFramework]
(#__RefHeading__613_584730065)框架
[2]
(#__RefHeading__615_584730065)、项目结构
[3]
(#__RefHeading__617_584730065)[
、swoole]
(#__RefHeading__617_584730065)模式服务器配置
[LISTEN //]
(#__RefHeading__619_584730065)监听配置
[CONF //]
(#__RefHeading__621_584730065)服务器配置
[三、运行程序 ]
(#__RefHeading__623_584730065)
[四、函数列表 ]
(#__RefHeading__625_584730065)
一、环境依赖
Linux下
PHP5.5.0以上版本
Swoole扩展
PHPRedis
Windows下
安装cygwin,并安装gcc、make
、autoconf、php 4个包
安装swoole、phpredis
二、项目创建
1、创建启动文件,引入
SocketFramework框架
Start.php
error_reporting(E_ALL); //设置
PHP 的报错级别
$APP_PATH = 'Example'; //代码
路径
$RUNTIME_PATH = 'Runtime'; //
缓存
define('APP_MODE','SWOOLE');
//模式
define
('DEFAULT_MODULE','Application'
);//这个版本中必须定义默认模块
,其值与APP_PATH的最后一个目录
相同
include '../
SocketFramework/Tsy/Tsy.php';
//引入SocketFramework
2、项目结构
ServerDemo
Start.php //入口文件
|Demo
|Common //通用
配置
|Config
Swoole.php //swoole模式服务器配
置
http.php //http模式服务器配置
|
Functions
function.php //共有方法
|User
|Config
config.php //模块配置:数据库连
接信息、自定义常量等
|
Controller
UserController.class.php //控制
器
|Model
UserModel.class.php //模型
|Object
UserObj.class.php //数据对象
3、swoole模式服务器配置
在Swoole.php文件中进行配置,配
置信息为监听配置和服务器运行设置
。
LISTEN //监听配置
HOST
允许访问的ip,设置为0.0.0.0为全
ip允许访问
PORT
设置服务器暴露端口
TYPE
监听类型
DISPATCH
路由设置,设置访问参数的解析方式
OUT
输出参数格式设置
CONF //服务器配置
详见swoole官方文档
Daemonize
守护进程化。设置daemonize =>
1时,程序将转入后台作为守护进程
运行。长时间运行的服务器端程序必
须启用此项。
如果不启用守护进程,当ssh终端退
出后,程序将被终止运行。
启用守护进程后,标准输入和
输出会被重定向到 log_file
如果未设置log_file,将重定
向到
/dev/null,所有打印屏幕的信
息都会被丢弃
task_worker_num
配置task进程的数量,配置此参数
后将会启用task功能。所以swoole
_server务必要注册
onTask/onFinish2个事件回调函数
。如果没有注册,服务器程序将无法
启动。
task进程是同步阻塞的,配置方式
与worker同步模式一致。
dispatch_mode
数据包分发策略。可以选择3种类型
,默认为2
1,轮循模式,收到会轮循分配
给每一个worker进程
2,固定模式,根据连接的文件
描述符分配worker。这样可以保证
同一个连接发来的数据只会被同一个
worker处理
3,抢占模式,主进程会根据
Worker的忙闲状态选择投递,只会
投递给处于闲置状态的Worker
4,IP分配,根据客户端IP进行
取模hash,分配给一个固定的
worker进程。可以保证同一个来源
IP的连接数据总会被分配到同一个
worker进程。算法为 ip2long
(ClientIP)
% worker_num
5,UID分配,需要用户代码中
调用$serv->bind()将一个连接绑
定1个uid。然后swoole根据UID的值
分配到不同的worker进程。算法为
UID
% worker_num,如果需要使用
字符串作为UID,可以使用crc32
(UID_STRING)
dispatch_mode 4,5两种模式,在
1.7.8以上版本可用
dispatch_mode=1/3时,底层会屏
蔽onConnect/onClose事件,原因是
这2种模式下无法保证
onConnect/onClose/onReceive的顺
序
非请求响应式的服务器程序,请不要
使用模式1或3
worker_num
设置启动的worker进程数。
业务代码是全异步非阻塞的,
这里设置为CPU的1-4倍最合理
业务代码为同步阻塞,需要根
据请求响应时间和系统负载来调整
比如1个请求耗时100ms,要提供
1000QPS的处理能力,那必须配置
100个进程或更多。但开的进程越多
,占用的内存就会大大增加,而且进
程间切换的开销就会越来越大。所以
这里适当即可。不要配置过大。
每个进程占用40M内存,那100
个进程就需要占用4G内存
三、运行程序
cd /home/ServerDemo
php start.php
四、函数列表
五、更新记录
[2016-04-25]
^cache函数中的标签操作中的-针对数组的算法使用数组求差集而不是搜索后unset
[2016-04-24]
+cache函数支持[+][-][-A][+A][-S][-A]操作符,+-表示添加或删除,A表示按数组操作,S表示按字符串操作,
示例:
cache('[+A]ke','ss');
[2016-04-22]
+若在启动脚本中定义APP_BUILD值为true,则会扫描项目目录下的模块并链接模块配置中的数据库生成Controller和Object以及Model文件和相关缓存文件
[2017-03-05]
+在DB.class.php中添加备份数据库和更新数据库的方法。备份数据库接口地址:./SocketFramework/Tsy/Plugs/Db/Db/backUp 参数path 备份的文件路径和名称 更新数据库的接口地址:./SocketFramework/Tsy/Plugs/Db/Db/upgrade 参数file 更新的sql文件的路径及名称