|
|
|
@ -2,8 +2,14 @@ |
|
|
|
/** |
|
|
|
* 总览 |
|
|
|
*/ |
|
|
|
use Workerman\Worker; |
|
|
|
use Workerman\Timer; |
|
|
|
|
|
|
|
header("Access-Control-Allow-Origin:*"); |
|
|
|
header('X-Accel-Buffering: no'); |
|
|
|
header('Content-Type: text/event-stream'); |
|
|
|
header('Cache-Control: no-cache'); |
|
|
|
ob_end_clean(); |
|
|
|
ob_implicit_flush(1); |
|
|
|
|
|
|
|
use app\common\dm\Dm; |
|
|
|
use app\common\logic\PassFlow; |
|
|
|
require_once __DIR__ . '/workman/vendor/autoload.php'; |
|
|
|
@ -15,42 +21,52 @@ require_once __DIR__ . '../../source/application/common.php'; |
|
|
|
$config = require_once __DIR__ . '../../source/application/database.php'; |
|
|
|
|
|
|
|
date_default_timezone_set('Asia/Shanghai'); |
|
|
|
$dm = new Dm($config['connections']['dm']); |
|
|
|
|
|
|
|
$xh = 0; |
|
|
|
while($xh < 1) { |
|
|
|
$data = [ |
|
|
|
'code' => 1, |
|
|
|
'msg' => 'success' |
|
|
|
]; |
|
|
|
|
|
|
|
# 客流趋势 与 占比 |
|
|
|
$allGroupTimeNumDay = PassFlow::allGroupTimeNum(['groupsId' => '','granularity' => 'daily'],$dm); |
|
|
|
$allGroupTimeNumMonth = PassFlow::allGroupTimeNum(['groupsId' => '','granularity' => 'monthly'],$dm); |
|
|
|
$allGroupTimeNumYear = PassFlow::allGroupTimeNum(['groupsId' => '','granularity' => 'yearly'],$dm); |
|
|
|
$data['allGroupTimeNumDay'] = ['data' => $allGroupTimeNumDay]; |
|
|
|
$data['allGroupTimeNumMonth'] = ['data' => $allGroupTimeNumMonth]; |
|
|
|
$data['allGroupTimeNumYear'] = ['data' => $allGroupTimeNumYear]; |
|
|
|
|
|
|
|
# 今日各场馆 |
|
|
|
$data['toDayGroupsEnterNum'] = ['data' => PassFlow::toDayGroupsEnterNum($dm)]; |
|
|
|
|
|
|
|
# 中间总数据 |
|
|
|
$data['allGroupNum'] = ['data' => PassFlow::allGroupNum($dm)]; |
|
|
|
|
|
|
|
# 各场馆实时 |
|
|
|
$data['realTimeData'] = ['data' => PassFlow::realTimeData($dm)]; |
|
|
|
|
|
|
|
$xh = $xh + 1; |
|
|
|
returnEventData($data,"message",$xh); |
|
|
|
sleep(3); |
|
|
|
} |
|
|
|
|
|
|
|
$worker = new Worker('websocket://0.0.0.0:1234'); |
|
|
|
$worker->count = 4; |
|
|
|
// 进程启动后定时推送数据给客户端 |
|
|
|
$worker->onWorkerStart = function($worker) use($config) { |
|
|
|
# 数据库链接不能在主进程,方法外是主进程 |
|
|
|
$dm = new Dm($config['connections']['dm']); |
|
|
|
// 每2.5秒执行一次 |
|
|
|
$time_interval = 3; |
|
|
|
Timer::add($time_interval, function()use($worker,$dm){ |
|
|
|
foreach($worker->connections as $connection) { |
|
|
|
|
|
|
|
$data = [ |
|
|
|
'code' => 1, |
|
|
|
'msg' => 'success' |
|
|
|
]; |
|
|
|
|
|
|
|
# 客流趋势 与 占比 |
|
|
|
$allGroupTimeNumDay = PassFlow::allGroupTimeNum(['groupsId' => '','granularity' => 'daily'],$dm); |
|
|
|
$allGroupTimeNumMonth = PassFlow::allGroupTimeNum(['groupsId' => '','granularity' => 'monthly'],$dm); |
|
|
|
$allGroupTimeNumYear = PassFlow::allGroupTimeNum(['groupsId' => '','granularity' => 'yearly'],$dm); |
|
|
|
$data['allGroupTimeNumDay'] = ['data' => $allGroupTimeNumDay]; |
|
|
|
$data['allGroupTimeNumMonth'] = ['data' => $allGroupTimeNumMonth]; |
|
|
|
$data['allGroupTimeNumYear'] = ['data' => $allGroupTimeNumYear]; |
|
|
|
|
|
|
|
# 今日各场馆 |
|
|
|
$data['toDayGroupsEnterNum'] = ['data' => PassFlow::toDayGroupsEnterNum($dm)]; |
|
|
|
|
|
|
|
# 中间总数据 |
|
|
|
$data['allGroupNum'] = ['data' => PassFlow::allGroupNum($dm)]; |
|
|
|
|
|
|
|
# 各场馆实时 |
|
|
|
$data['realTimeData'] = ['data' => PassFlow::realTimeData($dm)]; |
|
|
|
|
|
|
|
$connection->send(json_encode($data)); |
|
|
|
} |
|
|
|
}); |
|
|
|
}; |
|
|
|
Worker::runAll(); |
|
|
|
function returnEventData($returnData, $event='message', $id=0, $retry=0) { |
|
|
|
$str = ''; |
|
|
|
if($id>0) { |
|
|
|
$str .= "id: {$id}".PHP_EOL; |
|
|
|
} |
|
|
|
if($event) { |
|
|
|
$str.= "event: {$event}".PHP_EOL; |
|
|
|
} |
|
|
|
if($retry>0) { |
|
|
|
$str .= "retry: {$retry}".PHP_EOL; |
|
|
|
} |
|
|
|
if(is_array($returnData)) { |
|
|
|
$returnData = json_encode($returnData); |
|
|
|
} |
|
|
|
$str .= "data: {$returnData}".PHP_EOL; |
|
|
|
$str .= PHP_EOL; |
|
|
|
echo $str; |
|
|
|
} |