作者 邓超

proxy

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