diff --git a/web/ws_task_real.php b/web/ws_task_real.php index 6666cbb..25d1ba7 100644 --- a/web/ws_task_real.php +++ b/web/ws_task_real.php @@ -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(); \ No newline at end of file +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; +} \ No newline at end of file