ZYS高性能服務(wù)框架
核心特性
1.基于swoole提供分布式服務(wù)器通訊服務(wù) 2.基于thrift提供rpc遠(yuǎn)程調(diào)用服務(wù) 3.基于HTML5提供在線網(wǎng)絡(luò)直播平臺服務(wù) 4.基于swoole提供同步異步數(shù)據(jù)庫連接池服務(wù) 5.基于swoole提供異步任務(wù)服務(wù)器 6.基于vmstat提供服務(wù)器硬件實時監(jiān)控服務(wù) 7.基于yac、yaconf提供共享數(shù)據(jù)、配置服務(wù) 8.基于zqf提供高并發(fā)計數(shù)器、紅包、二維碼服務(wù) 9.很好的支持網(wǎng)頁版console的shell服務(wù)
服務(wù)啟動
需要php以cli模式運行/server/server.php
php server.php start
php server.php stop
php server.php restart
composer 安裝
{
"require": {
"qieangel2013/zys": "0.1.4"
}
}
分布式服務(wù)器通訊服務(wù)
建立多個服務(wù)器之間進(jìn)行數(shù)據(jù)通信服務(wù),服務(wù)自動連接在線服務(wù)器,支持熱拔,啟動服務(wù)后自動連接,無需人為干預(yù)
注意事項:
需要在conf/application.conf里配置端口和監(jiān)聽、日志等
需要有一個redis服務(wù)器,并且分布式服務(wù)器都能連接redis
web端可以直接調(diào)用服務(wù)
使用如下
//注意:type為sql、file,要是需要別的功能,自己定義
if($_FILES){
//數(shù)據(jù)同步
$sql = array('type'=>'sql','data'=>'show tables');
var_dump(distributed::getInstance()->query($sql));
//文件同步(不用安裝rsync+notify就可以實現(xiàn)文件同步,并且是觸發(fā)式的占用很小的資源,調(diào)用sendfile零復(fù)制)
$dir_pre=MYPATH.'/public/uploads/';
if(!is_dir($dir_pre.date('Ymd'))){
mkdir($dir_pre.date('Ymd'),0777,true);
}
if(is_uploaded_file($_FILES['file']['tmp_name'])){
$upname=explode('.',$_FILES['file']['name']);
$filename=uniqid().substr(time(),-4).'.'.$upname[1];
if(move_uploaded_file($_FILES['file']['tmp_name'],$dir_pre.date('Ymd').'/'.$filename)){
echo "Stored in: " . $dir_pre.date('Ymd').'/'.$filename;
$fileinfo = array('type'=>'file','data'=>array('path' =>'/public/uploads/'.date('Ymd').'/'.$filename,'size'=>$_FILES['file']['size'],'ext'=>$upname[1]));
var_dump(distributed::getInstance()->queryfile($fileinfo));
}else{
echo 'Stored failed:file save error';
}
}else{
echo 'Stored failed:no post ';
}
}
本地訪問:http:/localhost/index/distributed/
架構(gòu)圖
thrift的rpc遠(yuǎn)程調(diào)用
本地訪問http://localhost/index/rpc (返回0表示成功)
數(shù)據(jù)庫連接池使用方法
服務(wù)文件在/server/mysql/DbServer.php
簡單地封裝文件在/application/library/mysql/dbclient.php
配置在conf/application.ini中
;數(shù)據(jù)庫連接池配置
DbServer.async=true //配置是同步執(zhí)行還是異步執(zhí)行,默認(rèn)不配置代表異步執(zhí)行,同步執(zhí)行設(shè)置為false
DbServer.multiprocess=false //配置是否啟用多進(jìn)程,默認(rèn)不配置代表單進(jìn)程阻塞模式,多進(jìn)程模式要設(shè)置為true
DbServer.pool_num=20 //配置連接池mysql的數(shù)量
DbServer.port=9501
DbServer.logfile="/server/log/DbServer.log"
DbServer.localip="192.168.2.13"
使用方法:
$dbclient=new mysql_dbclient;
//print_r($data);
for ($i=0; $i <100 ; $i++) {
$dbclient->query("INSERT INTO user(name) VALUES('$i')");
//echo "INSERT INTO user(name) VALUES('$i')";
}
$data=$dbclient->query("select * from user");
$dbclient->close();
print_r($data);
exit;
本地訪問:http:/localhost/index/dbtest/
數(shù)據(jù)庫連接池多進(jìn)程執(zhí)行如下
swoole實現(xiàn)簡單的視頻直播(可以實時傳音頻、視頻、聊天)
錄制視頻頁面 http://localhost/index/swoolelivecamera 接受視頻頁面 http://localhost/index/swoolelive
vmstat服務(wù)器監(jiān)控
本地訪問http://localhost/vmstat/ 執(zhí)行如下:
yac、yaconf提供共享數(shù)據(jù)、配置使用如下
需要安裝php擴(kuò)展yac、yaconf
//注意:需要安裝yaconf擴(kuò)展,并且yaconf.directory=/tmp/yaconf 必須在php.ini里設(shè)置,不能動態(tài)加載
echo Yaconf::get("conf.zqf");
//注意:需要安裝yac擴(kuò)展,用于存儲共享變量,下面的實例作為高并發(fā)計數(shù)器
$yac = new Yac();
$count=$yac->get('zqf');
if(!$count){
$yac->set('zqf', 1);
}else{
$yac->set('zqf', $count+0.5);
}
echo $count;
高并發(fā)計數(shù)器、紅包、二維碼使用如下
需要安裝php擴(kuò)展zqf
首先安裝php擴(kuò)展zqf.so
phpize來安裝
然后在php文件調(diào)用
dl('zqf.so');或者phpini里加載([https://github.com/qieangel2013/zqf)
$obj=new zqf();
$counter= $obj->autoadd(0,1,0);(聲明只針對多線程)
echo $counter;
紅包第一個參數(shù)是紅包總額,第二個人參數(shù)紅包數(shù)量,第三個參數(shù)默認(rèn)代表拼手氣紅包,設(shè)置為1的話為普通紅包
拼手氣紅包
$hongb= $obj->hongbao(10,8);或者$hongb= $obj->hongbao(10,8,0);返回數(shù)組為Array ( [0] => 1.33 [1] => 1.02 [2] => 1.28 [3] => 0.44 [4] => 1.37 [5] => 0.81 [6] => 1.81 [7] => 1.94 )
普通紅包,每個人數(shù)額一樣設(shè)置第三個參數(shù)
$hongb= $obj->hongbao(10,8,1);返回數(shù)組為Array ( [0] => 1.25 [1] => 1.25 [2] => 1.25 [3] => 1.25 [4] => 1.25 [5] => 1.25 [6] => 1.25 [7] => 1.25 )
var_dump($hongb);
$obj->savefile('https://www.baidu.com/s?wd=昌平香堂','./test.png',500);第一個參數(shù)是url,第二參數(shù)是保存路徑,第三個參數(shù)是二維碼長或者寬
$obj->savefile('https://www.baidu.com/s?wd=昌平香堂','./test.png',500,1);第一個參數(shù)是url,第二參數(shù)是保存路徑,第三個參數(shù)是二維碼長或者寬,第四個參數(shù)是決定是否透明,默認(rèn)是不透明的
網(wǎng)頁版console的shell使用如下
本地訪問http://localhost/console
交流使用
zys框架交流群:337937322
License
Apache License Version 2.0 see http://www.apache.org/licenses/LICENSE-2.0.html
評論
圖片
表情
