作者 邓超

同步

正在显示 1 个修改的文件 包含 24 行增加3 行删除
@@ -15,13 +15,14 @@ function start(){ @@ -15,13 +15,14 @@ function start(){
15 $pm = new Process\Manager(); 15 $pm = new Process\Manager();
16 16
17 // 启动业务进程 17 // 启动业务进程
18 - $pm->addBatch(20,function (Process\Pool $pool, int $worker_id){ 18 + $pm->addBatch(10,function (Process\Pool $pool, int $worker_id){
19 19
20 swoole_set_process_name('php-email-sync-list-'.$worker_id); 20 swoole_set_process_name('php-email-sync-list-'.$worker_id);
21 21
22 include_once __DIR__."/../vendor/autoload.php"; 22 include_once __DIR__."/../vendor/autoload.php";
23 _echo("业务进程({$worker_id})启动成功"); 23 _echo("业务进程({$worker_id})启动成功");
24 24
  25 + $goNum = 0;
25 // 循环阻塞 26 // 循环阻塞
26 while (true){ 27 while (true){
27 28
@@ -32,10 +33,30 @@ function start(){ @@ -32,10 +33,30 @@ function start(){
32 // 占用当前的id,占用2小时 33 // 占用当前的id,占用2小时
33 if(redis()->add('just_sync_'.$id,time(),600)){ 34 if(redis()->add('just_sync_'.$id,time(),600)){
34 // 启动一个协程 35 // 启动一个协程
35 - go(function () use ($id){  
36 - echo file_get_contents('http://mail-serve.hagro.cn/v3/sync?id='.$id); 36 + go(function () use ($id,&$goNum){
  37 + $goNum++;
  38 + try{
  39 + // 开始同步
  40 + (new \Service\SyncMail($id))->sync();
  41 + }catch (Throwable $e){
  42 + logs('sync : '.$e->getMessage());
  43 + }
  44 +
  45 +
  46 + // 协程完成后执行的函数
  47 + co::defer(function () use ($id,&$goNum){
  48 + $goNum--;
  49 + // 30秒后 消除占用
  50 + redis()->expire('just_sync_'.$id,60);
  51 + // 写入日志
  52 + \Lib\Log::getInstance()->write();
37 }); 53 });
38 54
  55 + });
  56 + while ($goNum == 0){
  57 + co::sleep(0.5);
  58 + break;
  59 + }
39 } 60 }
40 }else{ 61 }else{
41 co::sleep(1); 62 co::sleep(1);