正在显示
1 个修改的文件
包含
63 行增加
和
37 行删除
| 1 | <?php | 1 | <?php |
| 2 | 2 | ||
| 3 | -//error_reporting(); | ||
| 4 | -include_once __DIR__."/../vendor/autoload.php"; | ||
| 5 | 3 | ||
| 6 | -swoole_set_process_name('php-email-sync-list-my'); | ||
| 7 | 4 | ||
| 8 | -\Lib\DbPool::$clientNumber = 60; | ||
| 9 | 5 | ||
| 10 | -\Co\run(function (){ | ||
| 11 | - $goNum = 0; | ||
| 12 | - while (1){ | 6 | +class SyncEmailMy{ |
| 13 | 7 | ||
| 14 | - if($goNum>=50){ | ||
| 15 | - co::sleep(1); | ||
| 16 | - continue; | ||
| 17 | - } | 8 | + static $maxGo = 0; |
| 18 | 9 | ||
| 19 | - $id = redis()->lPop('sync_email_lists_my'); | ||
| 20 | - // _echo('读取到'.$id); | ||
| 21 | - if($id && is_numeric($id)){ | ||
| 22 | - // 占用当前的id,占用2小时 | ||
| 23 | - if(redis()->add('just_sync_'.$id,time(),600)){ | 10 | + public static function sync(){ |
| 11 | + while (1){ | ||
| 24 | 12 | ||
| 25 | - go(function ($id) use (&$goNum){ | ||
| 26 | - $goNum++; | ||
| 27 | - try{ | ||
| 28 | - // 开始同步 | ||
| 29 | - (new \Service\SyncMail($id))->isUidAfter(2)->sync(); | ||
| 30 | - }catch (Throwable $e){ | ||
| 31 | - _echo($e->getMessage()); | ||
| 32 | - } | 13 | + if(self::$maxGo >= 50){ |
| 14 | + co::sleep(1); | ||
| 15 | + continue; | ||
| 16 | + } | ||
| 33 | 17 | ||
| 34 | - co::defer(function () use ($id,&$goNum){ | ||
| 35 | - $goNum--; | ||
| 36 | - // 30秒后 消除占用 | ||
| 37 | - redis()->expire('just_sync_'.$id,30); | 18 | + $id = redis()->lPop('sync_email_lists_my'); |
| 19 | + // _echo('读取到'.$id); | ||
| 20 | + if($id && is_numeric($id)){ | ||
| 21 | + // 占用当前的id,占用2小时 | ||
| 22 | + if(redis()->add('just_sync_'.$id,time(),600)){ | ||
| 38 | 23 | ||
| 39 | - \Lib\Log::getInstance()->write(); | 24 | + self::go($id); |
| 40 | 25 | ||
| 41 | - db()->close(); | ||
| 42 | - }); | ||
| 43 | - },$id); | 26 | + } |
| 27 | + co::sleep(0.2); | ||
| 28 | + }else{ | ||
| 29 | + co::sleep(1); | ||
| 30 | + } | ||
| 44 | 31 | ||
| 32 | + } | ||
| 33 | + } | ||
| 45 | 34 | ||
| 35 | + public static function go($id){ | ||
| 36 | + go(function ($id){ | ||
| 37 | + self::$maxGo++; | ||
| 38 | + try{ | ||
| 39 | + // 开始同步 | ||
| 40 | + (new \Service\SyncMail($id))->isUidAfter(2)->sync(); | ||
| 41 | + }catch (Throwable $e){ | ||
| 42 | + _echo($e->getMessage()); | ||
| 46 | } | 43 | } |
| 47 | - co::sleep(0.2); | ||
| 48 | - }else{ | ||
| 49 | - co::sleep(1); | ||
| 50 | - } | ||
| 51 | 44 | ||
| 45 | + co::defer(function () use ($id){ | ||
| 46 | + self::$maxGo--; | ||
| 47 | + // 30秒后 消除占用 | ||
| 48 | + redis()->expire('just_sync_'.$id,30); | ||
| 49 | + | ||
| 50 | + \Lib\Log::getInstance()->write(); | ||
| 51 | + | ||
| 52 | + db()->close(); | ||
| 53 | + }); | ||
| 54 | + },$id); | ||
| 52 | } | 55 | } |
| 53 | -}); | 56 | + |
| 57 | +} | ||
| 58 | + | ||
| 59 | + | ||
| 60 | +// 进程管理器 | ||
| 61 | +$pm = new \Swoole\Process\Manager(); | ||
| 62 | + | ||
| 63 | +// 启动业务进程 | ||
| 64 | +$pm->addBatch(2,function (\Swoole\Process\Pool $pool, int $worker_id){ | ||
| 65 | + //error_reporting(); | ||
| 66 | + include_once __DIR__."/../vendor/autoload.php"; | ||
| 67 | + | ||
| 68 | + _echo('子进程重新启动了==>'.$worker_id); | ||
| 69 | + | ||
| 70 | + \Lib\DbPool::$clientNumber = 60; | ||
| 71 | + | ||
| 72 | + SyncEmailMy::sync(); | ||
| 73 | + | ||
| 74 | +},true); | ||
| 75 | + | ||
| 76 | +$pm->start(); | ||
| 77 | + | ||
| 78 | + | ||
| 79 | + | ||
| 54 | 80 | ||
| 55 | 81 | ||
| 56 | 82 |
-
请 注册 或 登录 后发表评论