正在显示
6 个修改的文件
包含
125 行增加
和
335 行删除
cmd/hot_mail_3.php
已删除
100644 → 0
| 1 | -<?php | ||
| 2 | - | ||
| 3 | -use Model\listsSql; | ||
| 4 | - | ||
| 5 | - | ||
| 6 | -/** | ||
| 7 | - * 把预热的邮件进行归档处理 减少数量量 | ||
| 8 | - * @author:dc | ||
| 9 | - * @time 2025/1/17 17:10 | ||
| 10 | - * Class HotMail | ||
| 11 | - */ | ||
| 12 | -class HotMailArchive { | ||
| 13 | - | ||
| 14 | - public function __construct(){ | ||
| 15 | - $this->db = db(); | ||
| 16 | - $this->start(); | ||
| 17 | - } | ||
| 18 | - | ||
| 19 | - /** | ||
| 20 | - * shopk那边的预热邮箱 | ||
| 21 | - * @var array | ||
| 22 | - */ | ||
| 23 | - private $hotEmail = []; | ||
| 24 | - | ||
| 25 | - /** | ||
| 26 | - * @var \Lib\Db|\Lib\DbPool | ||
| 27 | - */ | ||
| 28 | - private $db; | ||
| 29 | - | ||
| 30 | - | ||
| 31 | - /** | ||
| 32 | - * @author:dc | ||
| 33 | - * @time 2024/7/18 14:04 | ||
| 34 | - */ | ||
| 35 | - private function start(){ | ||
| 36 | - _echo('启动预热邮件归档处理 '.getmypid()); | ||
| 37 | - | ||
| 38 | -// $fid = [235623,235628,235633,235638,235643,235648,235653,235658,235663,235668,235673,235678,235683,235688,235693,235698,235703,235708,235713,235718,235723,235728,235733,235738,235743,235748,235753,235758,235763,235768,235773,235778,235783,235788,235793,235798,235803,235808,235813,235818,235823,235828,235833,235838,235843,235848,235853,235858,235863,235868,235873,235878,235883,235888,235893,235898,235903,235908,235913,235918,235923,235928,235933,235938,235943,235948,235953,235958,235963,235968,235973,235978,235983,235988,235993,235998,236003,236008,236013,236018]; | ||
| 39 | -// foreach ($fid as $i){ | ||
| 40 | -// $this->move($i); | ||
| 41 | -// } | ||
| 42 | -// return 0; | ||
| 43 | - | ||
| 44 | - $id = 0; | ||
| 45 | - while (1){ | ||
| 46 | - $id = $this->run($id); | ||
| 47 | - if($id === 0){ | ||
| 48 | - break; | ||
| 49 | - } | ||
| 50 | - } | ||
| 51 | - | ||
| 52 | - } | ||
| 53 | - | ||
| 54 | - | ||
| 55 | - private function run($id):int { | ||
| 56 | - $floder = $this->db->first(\Model\folderSql::first(['id.>'=>$id])); | ||
| 57 | - | ||
| 58 | - if($floder){ | ||
| 59 | - $this->move($floder['id']); | ||
| 60 | - return $floder['id']; | ||
| 61 | - }else{ | ||
| 62 | - return 0; | ||
| 63 | - } | ||
| 64 | - | ||
| 65 | - | ||
| 66 | - } | ||
| 67 | - | ||
| 68 | - public function move($fid){ | ||
| 69 | - _echo('正在移动 '.$fid); | ||
| 70 | - $list = $this->db->all(\Model\listsSql::first(dbWhere(['folder_id'=>$fid,'is_hots'=>1])).'0000'); | ||
| 71 | - if($list){ | ||
| 72 | - $this->db->transaction(function () use ($list){ | ||
| 73 | - foreach ($list as $item){ | ||
| 74 | - try { | ||
| 75 | - $ret = $this->db->throw()->insert('lists_hot',$item,false); | ||
| 76 | - if($ret){ | ||
| 77 | - $this->db->delete(listsSql::$table,['id'=>$item['id']]); | ||
| 78 | - } | ||
| 79 | - }catch (Throwable $e){ | ||
| 80 | - $this->db->update('lists_hot',$item,dbWhere(['id'=>$item['id']])); | ||
| 81 | - } | ||
| 82 | - } | ||
| 83 | - return true; | ||
| 84 | - }); | ||
| 85 | - $list = null; | ||
| 86 | - $this->move($fid); | ||
| 87 | - } | ||
| 88 | - | ||
| 89 | - | ||
| 90 | - } | ||
| 91 | - | ||
| 92 | - | ||
| 93 | -} | ||
| 94 | - | ||
| 95 | - | ||
| 96 | -include_once "../vendor/autoload.php"; | ||
| 97 | - | ||
| 98 | -new HotMailArchive(); | ||
| 99 | - | ||
| 100 | -_echo('执行完成 等待下次执行'); | ||
| 101 | -// | ||
| 102 | -//swoole_set_process_name('hot-email-run-man'); | ||
| 103 | -// | ||
| 104 | -//$pm = new Swoole\Process\Manager(); | ||
| 105 | -// | ||
| 106 | -//$pm->addBatch(3,function (){ | ||
| 107 | -// | ||
| 108 | -// swoole_set_process_name('hot-email-run'); | ||
| 109 | -// | ||
| 110 | -// include_once "../vendor/autoload.php"; | ||
| 111 | -// | ||
| 112 | -// new HotMail(); | ||
| 113 | -// | ||
| 114 | -// exit(); | ||
| 115 | -//},true); | ||
| 116 | -// | ||
| 117 | -//$pm->start(); | ||
| 118 | - | ||
| 119 | - |
cmd/mail_del.php
已删除
100644 → 0
| 1 | -<?php | ||
| 2 | - | ||
| 3 | - | ||
| 4 | -/** | ||
| 5 | - * 循环本地,验证远程是否存在 不存在则删除本地 | ||
| 6 | - */ | ||
| 7 | -//error_reporting(); | ||
| 8 | - | ||
| 9 | -use Swoole\Process; | ||
| 10 | - | ||
| 11 | -include_once __DIR__."/../vendor/autoload.php"; | ||
| 12 | - | ||
| 13 | -function start(){ | ||
| 14 | - | ||
| 15 | - swoole_set_process_name('php-email-sync-list-check'); | ||
| 16 | - | ||
| 17 | - $id = 0; | ||
| 18 | - | ||
| 19 | -// $goNum = 0; | ||
| 20 | - // 循环阻塞 | ||
| 21 | - while (true){ | ||
| 22 | - | ||
| 23 | - $id = db()->value('select `id` from `'.\Model\emailSql::$table.'` where `id` > '.$id.' order by `id` asc limit 1'); | ||
| 24 | - | ||
| 25 | - if($id){ | ||
| 26 | - // 启动一个协程 | ||
| 27 | -// go(function () use ($id,&$goNum){ | ||
| 28 | -// $goNum++; | ||
| 29 | - // 开始同步 | ||
| 30 | - try { | ||
| 31 | - sync($id); | ||
| 32 | - }catch (\Throwable $e){ | ||
| 33 | - echo $e->getMessage(); | ||
| 34 | - } | ||
| 35 | - \Lib\Log::getInstance()->write(); | ||
| 36 | - | ||
| 37 | -// co::defer(function () use (&$goNum){ | ||
| 38 | -// $goNum--; | ||
| 39 | -// }); | ||
| 40 | -// }); | ||
| 41 | - | ||
| 42 | - }else{ | ||
| 43 | - break; | ||
| 44 | - } | ||
| 45 | - } | ||
| 46 | - | ||
| 47 | -// while ($goNum>0){ | ||
| 48 | -// co::sleep(1); | ||
| 49 | -// } | ||
| 50 | - _echo('结束了'); | ||
| 51 | -} | ||
| 52 | - | ||
| 53 | -/** | ||
| 54 | - * 开始同步, 这里是主要的业务代码 | ||
| 55 | - * @param $email_id | ||
| 56 | - * @param $worker_id | ||
| 57 | - * @return int | ||
| 58 | - * @author:dc | ||
| 59 | - * @time 2023/3/10 10:19 | ||
| 60 | - */ | ||
| 61 | -function sync($email_id){ | ||
| 62 | - | ||
| 63 | - $email = db()->first(\Model\emailSql::first($email_id)); | ||
| 64 | - if(!$email || $email['pwd_error']){ | ||
| 65 | - | ||
| 66 | - // 密码错误,或者超过一个月没有更新的邮箱 清空数据 | ||
| 67 | - if($email['pwd_error'] && $email['updated_at'] && strtotime($email['updated_at']) < (time()-86400*7) ){ | ||
| 68 | - db()->delete(\Model\listsSql::$table,['email_id'=>$email['id']]); | ||
| 69 | - } | ||
| 70 | - | ||
| 71 | - return 0; | ||
| 72 | - } | ||
| 73 | - | ||
| 74 | - // 读取到邮箱中的文件夹 | ||
| 75 | - $folders = db()->all(\Model\folderSql::all($email['id'])); | ||
| 76 | - if(!$folders){ | ||
| 77 | - return 3; | ||
| 78 | - } | ||
| 79 | - | ||
| 80 | - | ||
| 81 | - $mailServer = new Lib\Mail\Mail($email['email'],base64_decode($email['password']),$email['imap']); | ||
| 82 | - | ||
| 83 | - // 登录服务器 | ||
| 84 | - if($mailServer->login()!==1){ | ||
| 85 | - return 2; | ||
| 86 | - } | ||
| 87 | - | ||
| 88 | - $call = function ($email_id,$folder_id,$origin_folder) use ($mailServer){ | ||
| 89 | - _echo('run e '.$email_id.' fn '.$origin_folder); | ||
| 90 | - // gmail 邮箱 这个是不可选的 | ||
| 91 | - if($origin_folder == '[Gmail]'){ | ||
| 92 | - return; | ||
| 93 | - } | ||
| 94 | - // 同步父文件夹 | ||
| 95 | - $mailServer->client->selectFolder($origin_folder); | ||
| 96 | - $page = 0; | ||
| 97 | - $db = db(); | ||
| 98 | - while (1){ | ||
| 99 | - $ids = $db->all("select `id`,`uid` from ".\Model\listsSql::$table." where `email_id` = {$email_id} and `folder_id` = {$folder_id} and `udate` < ".strtotime("-1 day")." limit 100 offset ".($page*100)); | ||
| 100 | - $page++; | ||
| 101 | - if($ids){ | ||
| 102 | - try { | ||
| 103 | - $result = $mailServer->client->fetch(array_column($ids,'uid'),'UID',true); | ||
| 104 | - $result = array_column($result,'UID','UID'); | ||
| 105 | - }catch (Throwable $e){ | ||
| 106 | - _echo($e->getMessage()); | ||
| 107 | - return; | ||
| 108 | - } | ||
| 109 | - | ||
| 110 | - foreach ($ids as $id){ | ||
| 111 | - $uid = $id['uid']; $id = $id['id']; | ||
| 112 | - if(!$result || !isset($result[$uid])){ | ||
| 113 | - // 删除 如果远程没有,就删除本地 | ||
| 114 | - _echo('删除 e '.$email_id.' f '.$folder_id.' u '.$uid.' id '.$id.' d '.$db->delete(\Model\listsSql::$table,['id'=>$id]).' body '.$db->delete(\Model\bodySql::$table,['lists_id'=>$id])); | ||
| 115 | - } | ||
| 116 | - } | ||
| 117 | - } | ||
| 118 | - // 结束了 | ||
| 119 | - if(!$ids || count($ids) < 100){ | ||
| 120 | - break; | ||
| 121 | - } | ||
| 122 | - | ||
| 123 | - } | ||
| 124 | - | ||
| 125 | - | ||
| 126 | - }; | ||
| 127 | - | ||
| 128 | -// $folders = list_to_tree($folders); | ||
| 129 | - foreach ($folders as $folder){ | ||
| 130 | - try { | ||
| 131 | - $is = true; | ||
| 132 | - foreach ($folders as $f){ | ||
| 133 | - // 是否存在下级 | ||
| 134 | - if($f['pid'] == $folder['id']){ | ||
| 135 | - $is = false; | ||
| 136 | - } | ||
| 137 | - } | ||
| 138 | - | ||
| 139 | - if($is) $call($email_id,$folder['id'],$folder['origin_folder']); | ||
| 140 | - | ||
| 141 | - }catch (\Throwable $e){ | ||
| 142 | - echo $e->getMessage(); | ||
| 143 | - } | ||
| 144 | - } | ||
| 145 | - | ||
| 146 | - | ||
| 147 | - $email = null; | ||
| 148 | - $mailServer = null; | ||
| 149 | -} | ||
| 150 | - | ||
| 151 | - | ||
| 152 | -if(!function_exists("imap_8bit")){ | ||
| 153 | - echo '请安装imap扩展'; | ||
| 154 | - exit(0); | ||
| 155 | -} | ||
| 156 | - | ||
| 157 | - | ||
| 158 | -\Co\run(function (){ | ||
| 159 | - start(); | ||
| 160 | -}); | ||
| 161 | - | ||
| 162 | - | ||
| 163 | - | ||
| 164 | - | ||
| 165 | - | ||
| 166 | - | ||
| 167 | - | ||
| 168 | - | ||
| 169 | - | ||
| 170 | - |
| @@ -4,7 +4,7 @@ include_once "../vendor/autoload.php"; | @@ -4,7 +4,7 @@ include_once "../vendor/autoload.php"; | ||
| 4 | 4 | ||
| 5 | // 这里试试不用多进程模式,用多协程模式 | 5 | // 这里试试不用多进程模式,用多协程模式 |
| 6 | 6 | ||
| 7 | - | 7 | +\Lib\DbPool::$clientNumber = 50; |
| 8 | 8 | ||
| 9 | class SendJob { | 9 | class SendJob { |
| 10 | 10 | ||
| @@ -117,6 +117,12 @@ class SendJob { | @@ -117,6 +117,12 @@ class SendJob { | ||
| 117 | * @time 2024/4/10 9:25 | 117 | * @time 2024/4/10 9:25 |
| 118 | */ | 118 | */ |
| 119 | public function go_($list){ | 119 | public function go_($list){ |
| 120 | + // 控制50个协程内 | ||
| 121 | + while ($this->cnum>=50){ | ||
| 122 | + co::sleep(0.5); | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + | ||
| 120 | // 占用 id | 126 | // 占用 id |
| 121 | if(redis()->add('send_job_run_id_'.$list['id'],$list['id'],600)){ | 127 | if(redis()->add('send_job_run_id_'.$list['id'],$list['id'],600)){ |
| 122 | go(function ($data) { | 128 | go(function ($data) { |
| @@ -253,6 +259,7 @@ class SendJob { | @@ -253,6 +259,7 @@ class SendJob { | ||
| 253 | 259 | ||
| 254 | _echo('执行任务完成'.$data['id']); | 260 | _echo('执行任务完成'.$data['id']); |
| 255 | 261 | ||
| 262 | + db()->close(); | ||
| 256 | }); | 263 | }); |
| 257 | 264 | ||
| 258 | },$list); | 265 | },$list); |
| @@ -285,6 +292,7 @@ switch ($argv[1]??0){ | @@ -285,6 +292,7 @@ switch ($argv[1]??0){ | ||
| 285 | 292 | ||
| 286 | _echo('进程已退出'); | 293 | _echo('进程已退出'); |
| 287 | 294 | ||
| 295 | + db()->close(); | ||
| 288 | }); | 296 | }); |
| 289 | 297 | ||
| 290 | break; | 298 | break; |
| @@ -2,54 +2,103 @@ | @@ -2,54 +2,103 @@ | ||
| 2 | 2 | ||
| 3 | //error_reporting(); | 3 | //error_reporting(); |
| 4 | 4 | ||
| 5 | -include_once __DIR__."/../vendor/autoload.php"; | ||
| 6 | - | ||
| 7 | -$runNumber = 1000; | ||
| 8 | -// 循环阻塞 | ||
| 9 | -while ($runNumber){ | ||
| 10 | - $runNumber--; | ||
| 11 | - // 需要同步的id | ||
| 12 | - $id = redis()->lPop('sync_email_lists'); | ||
| 13 | - | ||
| 14 | - if($id && is_numeric($id)){ | ||
| 15 | - | ||
| 16 | - // 占用当前的id,占用2小时 | ||
| 17 | - if(redis()->add('just_sync_'.$id,time(),600)){ | ||
| 18 | - | ||
| 19 | - try{ | ||
| 20 | - // 开始同步 | ||
| 21 | - $email = db()->cache(3600)->first(\Model\emailSql::first($id)); | ||
| 22 | - if($email){ | ||
| 23 | - $sync = new \Service\SyncMail($email); | ||
| 24 | - // ai邮件只同步2天内的 | ||
| 25 | - $sync->search( | ||
| 26 | - (new \Lib\Imap\ImapSearch()) | ||
| 27 | - ->dateGt(date('Y-m-d',strtotime("-1 day"))) | ||
| 28 | - ); | ||
| 29 | - $sync->isUidAfter(2)->sync(); | ||
| 30 | - | ||
| 31 | - $sync = null; | ||
| 32 | - unset($sync); | ||
| 33 | - } | 5 | +use Swoole\Process; |
| 6 | + | ||
| 7 | + | ||
| 8 | + | ||
| 9 | +function start(){ | ||
| 10 | + | ||
| 11 | +// 删除停止运行的值 | ||
| 12 | +// redis()->delete(SYNC_RUNNING_REDIS_KEY,'email_sync_stop_num'); | ||
| 13 | + | ||
| 14 | + // 进程管理器 | ||
| 15 | + $pm = new Process\Manager(); | ||
| 16 | + | ||
| 17 | + // 启动业务进程 | ||
| 18 | + $pm->addBatch(10,function (Process\Pool $pool, int $worker_id){ | ||
| 19 | + | ||
| 20 | + swoole_set_process_name('php-email-sync-list-'.$worker_id); | ||
| 21 | + | ||
| 22 | + include_once __DIR__."/../vendor/autoload.php"; | ||
| 23 | + _echo("业务进程({$worker_id})启动成功"); | ||
| 24 | + | ||
| 25 | + $goNum = 0; | ||
| 26 | + // 循环阻塞 | ||
| 27 | + while (true){ | ||
| 34 | 28 | ||
| 35 | - }catch (Throwable $e){ | ||
| 36 | - logs('sync : '.$e->getMessage()); | 29 | + while ($goNum > 50){ |
| 30 | + co::sleep(0.5); | ||
| 31 | + continue; | ||
| 32 | + } | ||
| 33 | + // 需要同步的id | ||
| 34 | + $id = redis()->lPop('sync_email_lists'); | ||
| 35 | + | ||
| 36 | + if($id && is_numeric($id)){ | ||
| 37 | + | ||
| 38 | + // 占用当前的id,占用2小时 | ||
| 39 | + if(redis()->add('just_sync_'.$id,time(),600)){ | ||
| 40 | +// redis()->set('sync_my_pid:'.getmypid(),time(),86400); | ||
| 41 | + // 启动一个协程 | ||
| 42 | + go(function () use ($id,&$goNum){ | ||
| 43 | + $goNum++; | ||
| 44 | + try{ | ||
| 45 | + // 开始同步 | ||
| 46 | + $email = db()->cache(3600)->first(\Model\emailSql::first($id)); | ||
| 47 | + if($email){ | ||
| 48 | + $sync = new \Service\SyncMail($email); | ||
| 49 | + // ai邮件只同步2天内的 | ||
| 50 | + $sync->search( | ||
| 51 | + (new \Lib\Imap\ImapSearch()) | ||
| 52 | + ->dateGt(date('Y-m-d',strtotime("-1 day"))) | ||
| 53 | + ); | ||
| 54 | + $sync->isUidAfter(2)->sync(); | ||
| 55 | + | ||
| 56 | + $sync = null; | ||
| 57 | + unset($sync); | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + }catch (Throwable $e){ | ||
| 61 | + logs('sync : '.$e->getMessage()); | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + | ||
| 65 | + // 协程完成后执行的函数 | ||
| 66 | + co::defer(function () use ($id,&$goNum){ | ||
| 67 | + $goNum--; | ||
| 68 | + // 30秒后 消除占用 | ||
| 69 | + redis()->expire('just_sync_'.$id,120); | ||
| 70 | + // 写入日志 | ||
| 71 | + \Lib\Log::getInstance()->write(); | ||
| 72 | + // 手动释放 | ||
| 73 | + db()->close(); | ||
| 74 | + }); | ||
| 75 | + | ||
| 76 | + }); | ||
| 77 | + } | ||
| 37 | } | 78 | } |
| 38 | 79 | ||
| 39 | - // 30秒后 消除占用 | ||
| 40 | - redis()->expire('just_sync_'.$id,120); | 80 | + //每次都暂停1秒,防止同一时间启动太多的任务 |
| 81 | + co::sleep(1); | ||
| 41 | 82 | ||
| 42 | - // 写入日志 | ||
| 43 | - \Lib\Log::getInstance()->write(); | ||
| 44 | } | 83 | } |
| 45 | - }else{ | ||
| 46 | - break; | ||
| 47 | - } | 84 | + |
| 85 | + return 0; | ||
| 86 | + | ||
| 87 | + },true); | ||
| 88 | + | ||
| 89 | + | ||
| 90 | + // 启动管理器 | ||
| 91 | + $pm->start(); | ||
| 92 | + | ||
| 48 | } | 93 | } |
| 49 | 94 | ||
| 50 | 95 | ||
| 51 | 96 | ||
| 52 | 97 | ||
| 98 | +start(); | ||
| 99 | + | ||
| 100 | + | ||
| 101 | + | ||
| 53 | 102 | ||
| 54 | 103 | ||
| 55 | 104 |
| @@ -5,6 +5,8 @@ include_once __DIR__."/../vendor/autoload.php"; | @@ -5,6 +5,8 @@ include_once __DIR__."/../vendor/autoload.php"; | ||
| 5 | 5 | ||
| 6 | swoole_set_process_name('php-email-sync-list-my'); | 6 | swoole_set_process_name('php-email-sync-list-my'); |
| 7 | 7 | ||
| 8 | +\Lib\DbPool::$clientNumber = 600; | ||
| 9 | + | ||
| 8 | \Co\run(function (){ | 10 | \Co\run(function (){ |
| 9 | $goNum = 0; | 11 | $goNum = 0; |
| 10 | while (1){ | 12 | while (1){ |
| @@ -36,6 +38,7 @@ swoole_set_process_name('php-email-sync-list-my'); | @@ -36,6 +38,7 @@ swoole_set_process_name('php-email-sync-list-my'); | ||
| 36 | 38 | ||
| 37 | \Lib\Log::getInstance()->write(); | 39 | \Lib\Log::getInstance()->write(); |
| 38 | 40 | ||
| 41 | + db()->close(); | ||
| 39 | }); | 42 | }); |
| 40 | },$id); | 43 | },$id); |
| 41 | 44 |
| @@ -6,7 +6,7 @@ use Swoole\Database\PDOConfig; | @@ -6,7 +6,7 @@ use Swoole\Database\PDOConfig; | ||
| 6 | use Swoole\Database\PDOPool; | 6 | use Swoole\Database\PDOPool; |
| 7 | 7 | ||
| 8 | /** | 8 | /** |
| 9 | - * db 池 | 9 | + * db 池 不主动释放连接 |
| 10 | * @author:dc | 10 | * @author:dc |
| 11 | * @time 2023/2/13 15:03 | 11 | * @time 2023/2/13 15:03 |
| 12 | * Class DbPool | 12 | * Class DbPool |
| @@ -21,6 +21,17 @@ class DbPool { | @@ -21,6 +21,17 @@ class DbPool { | ||
| 21 | */ | 21 | */ |
| 22 | static $pool = null; | 22 | static $pool = null; |
| 23 | 23 | ||
| 24 | + /** | ||
| 25 | + * 获取到的连接 | ||
| 26 | + * @var array | ||
| 27 | + */ | ||
| 28 | + public static $clientAll = []; | ||
| 29 | + | ||
| 30 | + /** | ||
| 31 | + * 连接的数量 | ||
| 32 | + * @var int | ||
| 33 | + */ | ||
| 34 | + public static $clientNumber = 1024; | ||
| 24 | 35 | ||
| 25 | /** | 36 | /** |
| 26 | * 实例 | 37 | * 实例 |
| @@ -44,21 +55,26 @@ class DbPool { | @@ -44,21 +55,26 @@ class DbPool { | ||
| 44 | \PDO::ATTR_TIMEOUT => 30, | 55 | \PDO::ATTR_TIMEOUT => 30, |
| 45 | ]); | 56 | ]); |
| 46 | 57 | ||
| 47 | - static::$pool = new PDOPool($pdoconfig,1024); | 58 | + static::$pool = new PDOPool($pdoconfig,self::$clientNumber); |
| 48 | } | 59 | } |
| 49 | 60 | ||
| 50 | - // 获取链接 | ||
| 51 | - $this->client = static::$pool->get(); | ||
| 52 | 61 | ||
| 53 | } | 62 | } |
| 54 | 63 | ||
| 64 | + public function getClient() | ||
| 65 | + { | ||
| 66 | + $id = \co::getCid(); | ||
| 67 | + if(empty(static::$clientAll[$id])){ | ||
| 68 | + static::$clientAll[$id] = self::$pool->get(); | ||
| 69 | + } | ||
| 70 | + } | ||
| 55 | 71 | ||
| 56 | 72 | ||
| 57 | /** | 73 | /** |
| 58 | * 结束 | 74 | * 结束 |
| 59 | */ | 75 | */ |
| 60 | public function __destruct(){ | 76 | public function __destruct(){ |
| 61 | - $this->close(); | 77 | +// $this->close(); |
| 62 | } | 78 | } |
| 63 | 79 | ||
| 64 | /** | 80 | /** |
| @@ -67,8 +83,11 @@ class DbPool { | @@ -67,8 +83,11 @@ class DbPool { | ||
| 67 | * @time 2024/5/30 10:30 | 83 | * @time 2024/5/30 10:30 |
| 68 | */ | 84 | */ |
| 69 | public function close(){ | 85 | public function close(){ |
| 70 | - self::$pool->put($this->client); | ||
| 71 | - $this->client = null; | 86 | + $id = \co::getCid(); |
| 87 | + if (isset(static::$clientAll[$id])){ | ||
| 88 | + self::$pool->put(static::$clientAll[$id]); | ||
| 89 | + } | ||
| 90 | + unset(static::$clientAll[$id]); | ||
| 72 | } | 91 | } |
| 73 | 92 | ||
| 74 | 93 |
-
请 注册 或 登录 后发表评论