Browse Source

ws替换EventSource

master
wanghongjun 3 years ago
parent
commit
5b0f51dde6
  1. 1
      web/ws_task_real.php
  2. 93
      web/ws_task_real_ty.php
  3. 82
      web/ws_task_real_wh.php

1
web/ws_task_real.php

@ -12,7 +12,6 @@ ob_implicit_flush(1);
use app\common\dm\Dm; use app\common\dm\Dm;
use app\common\logic\PassFlow; use app\common\logic\PassFlow;
require_once __DIR__ . '/workman/vendor/autoload.php';
require_once __DIR__ . '../../source/application/common/dm/Dm.php'; require_once __DIR__ . '../../source/application/common/dm/Dm.php';
require_once __DIR__ . '../../source/application/common/logic/PassFlow.php'; require_once __DIR__ . '../../source/application/common/logic/PassFlow.php';
require_once __DIR__ . '../../source/thinkphp/helper.php'; require_once __DIR__ . '../../source/thinkphp/helper.php';

93
web/ws_task_real_ty.php

@ -2,11 +2,17 @@
/** /**
* 体育 * 体育
*/ */
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\dm\Dm;
use app\common\logic\PassFlow; use app\common\logic\PassFlow;
require_once __DIR__ . '/workman/vendor/autoload.php';
require_once __DIR__ . '../../source/application/common/dm/Dm.php'; require_once __DIR__ . '../../source/application/common/dm/Dm.php';
require_once __DIR__ . '../../source/application/common/logic/PassFlow.php'; require_once __DIR__ . '../../source/application/common/logic/PassFlow.php';
require_once __DIR__ . '../../source/thinkphp/helper.php'; require_once __DIR__ . '../../source/thinkphp/helper.php';
@ -15,42 +21,47 @@ require_once __DIR__ . '../../source/application/common.php';
$config = require_once __DIR__ . '../../source/application/database.php'; $config = require_once __DIR__ . '../../source/application/database.php';
date_default_timezone_set('Asia/Shanghai'); date_default_timezone_set('Asia/Shanghai');
$dm = new Dm($config['connections']['dm']);
$xh = 0;
while($xh < 1) {
$data = [];
# 累计服务人数
$data['allGroupNum'] = ['data' => PassFlow::allGroupNum($dm,['type' => 1])];
# 24小时
$data['getPassHoursData'] = ['data' => PassFlow::getPassHoursData($dm,['type' => 1])];
# 24小时进馆人数
$data['realTimeData'] = ['data' => PassFlow::realTimeData($dm)];
# 各场馆服务人次占比
$data['allGroupTimeNum'] = ['data' => PassFlow::allGroupTimeNum(['type' => 1,'granularity' => 'daily'],$dm)];
# 各场馆服务人次趋势
$data['toDayGroupsEnterNum'] = ['data' => PassFlow::toDayGroupsEnterNum($dm,['type' => 1])];
$xh = $xh + 1;
returnEventData($data,"message",$xh);
sleep(3);
}
$worker = new Worker('websocket://0.0.0.0:1235'); function returnEventData($returnData, $event='message', $id=0, $retry=0) {
$worker->count = 4; $str = '';
// 进程启动后定时推送数据给客户端 if($id>0) {
$worker->onWorkerStart = function($worker) use($config) { $str .= "id: {$id}".PHP_EOL;
# 数据库链接不能在主进程,方法外是主进程 }
$dm = new Dm($config['connections']['dm']); if($event) {
// 每2.5秒执行一次 $str.= "event: {$event}".PHP_EOL;
$time_interval = 3; }
Timer::add($time_interval, function()use($worker,$dm){ if($retry>0) {
foreach($worker->connections as $connection) { $str .= "retry: {$retry}".PHP_EOL;
$data = []; }
# 主动推送对应页面数据 if(is_array($returnData)) {
$returnData = json_encode($returnData);
// $groupIdArr = []; }
// $groupRes = $dm->select('bt_passenger_monitor_group',['type' => 1]); $str .= "data: {$returnData}".PHP_EOL;
// foreach ($groupRes as $groupRow) $groupIdArr[] = $groupRow['groupId']; $str .= PHP_EOL;
// $groupIdStr = !empty($groupIdArr) ? implode("|",$groupIdArr) : ''; echo $str;
}
# 累计服务人数
$data['allGroupNum'] = ['data' => PassFlow::allGroupNum($dm,['type' => 1])];
# 24小时
$data['getPassHoursData'] = ['data' => PassFlow::getPassHoursData($dm,['type' => 1])];
# 24小时进馆人数
$data['realTimeData'] = ['data' => PassFlow::realTimeData($dm)];
# 各场馆服务人次占比
$data['allGroupTimeNum'] = ['data' => PassFlow::allGroupTimeNum(['type' => 1,'granularity' => 'daily'],$dm)];
# 各场馆服务人次趋势
$data['toDayGroupsEnterNum'] = ['data' => PassFlow::toDayGroupsEnterNum($dm,['type' => 1])];
$connection->send(json_encode($data));
}
});
};
Worker::runAll();

82
web/ws_task_real_wh.php

@ -2,11 +2,15 @@
/** /**
* 文化 * 文化
*/ */
use Workerman\Worker; header("Access-Control-Allow-Origin:*");
use Workerman\Timer; 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\dm\Dm;
use app\common\logic\PassFlow; use app\common\logic\PassFlow;
require_once __DIR__ . '/workman/vendor/autoload.php';
require_once __DIR__ . '../../source/application/common/dm/Dm.php'; require_once __DIR__ . '../../source/application/common/dm/Dm.php';
require_once __DIR__ . '../../source/application/common/logic/PassFlow.php'; require_once __DIR__ . '../../source/application/common/logic/PassFlow.php';
require_once __DIR__ . '../../source/thinkphp/helper.php'; require_once __DIR__ . '../../source/thinkphp/helper.php';
@ -15,34 +19,46 @@ require_once __DIR__ . '../../source/application/common.php';
$config = require_once __DIR__ . '../../source/application/database.php'; $config = require_once __DIR__ . '../../source/application/database.php';
date_default_timezone_set('Asia/Shanghai'); date_default_timezone_set('Asia/Shanghai');
$dm = new Dm($config['connections']['dm']);
$xh = 0;
while($xh < 1) {
$data = [];
# 主动推送对应页面数据
# 累计服务人数 - 24小时服务人次
$data['allFlowTrends'] = ['data' => PassFlow::allFlowTrends($dm)];
# 24小时总服务人次趋势
$data['getLibraryHours24List'] = ['data' => PassFlow::getLibraryHours24List($dm)];
# 各场馆服务人次趋势
$data['getLibraryGroupHoursList'] = ['data' => PassFlow::getLibraryGroupHoursList($dm)];
# 图书馆数据统计
$data['getLibraryLeaseData'] = ['data' => PassFlow::getLibraryLeaseData($dm)];
$xh = $xh + 1;
returnEventData($data,"message",$xh);
sleep(3);
}
$worker = new Worker('websocket://0.0.0.0:1236'); function returnEventData($returnData, $event='message', $id=0, $retry=0) {
$worker->count = 4; $str = '';
// 进程启动后定时推送数据给客户端 if($id>0) {
$worker->onWorkerStart = function($worker) use($config) { $str .= "id: {$id}".PHP_EOL;
# 数据库链接不能在主进程,方法外是主进程 }
$dm = new Dm($config['connections']['dm']); if($event) {
// 每2.5秒执行一次 $str.= "event: {$event}".PHP_EOL;
$time_interval = 3; }
Timer::add($time_interval, function()use($worker,$dm){ if($retry>0) {
foreach($worker->connections as $connection) { $str .= "retry: {$retry}".PHP_EOL;
$data = []; }
# 主动推送对应页面数据 if(is_array($returnData)) {
$returnData = json_encode($returnData);
# 累计服务人数 - 24小时服务人次 }
$data['allFlowTrends'] = ['data' => PassFlow::allFlowTrends($dm)]; $str .= "data: {$returnData}".PHP_EOL;
$str .= PHP_EOL;
# 24小时总服务人次趋势 echo $str;
$data['getLibraryHours24List'] = ['data' => PassFlow::getLibraryHours24List($dm)]; }
# 各场馆服务人次趋势
$data['getLibraryGroupHoursList'] = ['data' => PassFlow::getLibraryGroupHoursList($dm)];
# 图书馆数据统计
$data['getLibraryLeaseData'] = ['data' => PassFlow::getLibraryLeaseData($dm)];
$connection->send(json_encode($data));
}
});
};
Worker::runAll();
Loading…
Cancel
Save