diff --git a/pgserver/application/common.php b/pgserver/application/common.php index ac4e10e..e9e6b1d 100644 --- a/pgserver/application/common.php +++ b/pgserver/application/common.php @@ -1638,7 +1638,11 @@ function writeLog($log = '', $level = "writelog") { * @return bool */ function pushToAllClients($eventName, $data) { - $socketUrl = 'http://127.0.0.1:2121'; + // 读取.env文件中的push配置(INI格式,包含sections) + $env = parse_ini_file(__DIR__ . '/../.env', true); + $push_config = isset($env['push']) ? $env['push'] : []; + $http_port = isset($push_config['http_port']) ? intval($push_config['http_port']) : 22120; + $socketUrl = 'http://127.0.0.1:' . $http_port; $postData = [ 'type' => 'broadcast', diff --git a/pgserver/application/push/controller/Push.php b/pgserver/application/push/controller/Push.php deleted file mode 100644 index 7309244..0000000 --- a/pgserver/application/push/controller/Push.php +++ /dev/null @@ -1,110 +0,0 @@ -emit('push_value', ['value' => $push_value]); - }); - - // 客户端发起连接事件时,设置连接socket的各种事件回调 - $sender_io->on('connection', function($socket) use (&$push_value){ - // 当客户端发来登录事件时触发 - $socket->on('login', function ($uid)use($socket){ - global $uidConnectionMap, $last_online_count, $last_online_page_count; - // 已经登录过了 - if(isset($socket->uid)){ - return; - } - // 更新对应uid的在线数据 - $uid = (string)$uid; - if(!isset($uidConnectionMap[$uid])) - { - $uidConnectionMap[$uid] = 0; - } - // 这个uid有++$uidConnectionMap[$uid]个socket连接 - ++$uidConnectionMap[$uid]; - // 将这个连接加入到uid分组,方便针对uid推送数据 - $socket->join($uid); - $socket->uid = $uid; - // 更新这个socket对应页面的在线数据 - $socket->emit('update_online_count', "当前{$last_online_count}人在线,共打开{$last_online_page_count}个页面"); - }); - - // 当客户端断开连接是触发(一般是关闭网页或者跳转刷新导致) - $socket->on('disconnect', function () use($socket) { - if(!isset($socket->uid)) - { - return; - } - global $uidConnectionMap, $sender_io; - // 将uid的在线socket数减一 - if(--$uidConnectionMap[$socket->uid] <= 0) - { - unset($uidConnectionMap[$socket->uid]); - } - }); - }); - - // 当$sender_io启动后监听一个http端口,通过这个端口可以给任意uid或者所有uid推送数据 - $sender_io->on('workerStart', function()use ($sender_io){ - // 监听一个http端口 - $inner_http_worker = new Worker('http://0.0.0.0:2121'); - // 当http客户端发来数据时触发 - $inner_http_worker->onMessage = function($http_connection, $data)use ($sender_io){ - global $uidConnectionMap; - $msgContent = $_POST?$_POST:$_GET; - // 推送数据的url格式 type=publish&to=uid&content=xxxx - switch(@$msgContent['type']){ - case 'publish': - $to = $msgContent['to']; - // 有指定uid则向uid所在socket组发送数据 - if($to){ - $sender_io->to($to)->emit('newMsg', $msgContent['content']); - // 否则向所有uid推送数据 - }else{ - $sender_io->emit('newMsg', $msgContent['content']); - } - // http接口返回,如果用户离线socket返回fail - if($to && !isset($uidConnectionMap[$to])){ - return $http_connection->send('offline'); - }else{ - return $http_connection->send('ok'); - } - } -// $sender_io->to(1)->emit('newMsg', '呀死啦累'); - return $http_connection->send('fail'); - }; - // 执行监听 - $inner_http_worker->listen(); - }); - - if(!defined('GLOBAL_START')) - { - Worker::runAll(); - } - - } -} diff --git a/pgserver/push.php b/pgserver/push.php index bbed4f6..3c09222 100644 --- a/pgserver/push.php +++ b/pgserver/push.php @@ -16,7 +16,12 @@ $uidConnectionMap = []; // 模拟推送的数值 $push_value = rand(100, 1000); // PHPSocketIO服务 -$sender_io = new SocketIO($socket_port); +// 添加CORS支持配置 +$sender_io = new SocketIO($socket_port, array( + 'allowOrigin' => '*', + 'allowMethods' => 'GET, POST, OPTIONS', + 'allowHeaders' => 'Content-Type', +)); // 客户端发起连接事件 $sender_io->on('connection', function($socket) use (&$push_value){