作者 邓超

mail del

@@ -26,38 +26,32 @@ function start(){ @@ -26,38 +26,32 @@ function start(){
26 include_once __DIR__."/../vendor/autoload.php"; 26 include_once __DIR__."/../vendor/autoload.php";
27 _echo("业务进程({$worker_id})启动成功"); 27 _echo("业务进程({$worker_id})启动成功");
28 28
29 - $run_timer = time();  
30 29
31 $id = 0; 30 $id = 0;
32 // 循环阻塞 31 // 循环阻塞
33 while (true){ 32 while (true){
34 33
35 - // 运行超过1天的 停止  
36 - if($run_timer < (time()-21600)){  
37 - break;  
38 - }  
39 -  
40 - $id = db()->value(\Model\listsSql::first('`id` > '.$id,'`id`')); 34 + $id = db()->value('select `id` from `'.\Model\emailSql::$table.'` where `id` > '.$id.' limit 1');
41 35
42 if($id){ 36 if($id){
43 // 占用当前的id,占用2小时 37 // 占用当前的id,占用2小时
44 - if(redis()->add('just_sync_delete_'.$id,time(),3600)){  
45 - // 启动一个协程  
46 - go(function () use ($id){  
47 - // 开始同步  
48 - try {  
49 - sync($id);  
50 - }catch (\Throwable $e){  
51 - echo $e->getMessage();  
52 - }  
53 - \Lib\Log::getInstance()->write();  
54 - });  
55 - } 38 + // if(redis()->add('just_sync_delete_'.$id,time(),3600)){
  39 + // 启动一个协程
  40 + go(function () use ($id){
  41 + // 开始同步
  42 + try {
  43 + sync($id);
  44 + }catch (\Throwable $e){
  45 + echo $e->getMessage();
  46 + }
  47 + \Lib\Log::getInstance()->write();
  48 + });
  49 + // }
56 }else{ 50 }else{
57 - co::sleep(1); 51 + //每次都暂停1秒,防止同一时间启动太多的任务
  52 + co::sleep(300);
  53 + break;
58 } 54 }
59 - //每次都暂停1秒,防止同一时间启动太多的任务  
60 - co::sleep(0.5);  
61 } 55 }
62 56
63 },true); 57 },true);
@@ -107,16 +101,20 @@ function sync($email_id){ @@ -107,16 +101,20 @@ function sync($email_id){
107 $page = 0; 101 $page = 0;
108 $db = db(); 102 $db = db();
109 while (1){ 103 while (1){
110 - $ids = $db->all("select `id`,`uid` from ".\Model\listsSql::$table." limit 100 offset ".($page*100)); 104 + $ids = $db->all("select `id`,`uid` from ".\Model\listsSql::$table." where `email_id` = {$email_id} and `folder_id` = {$folder_id} limit 100 offset ".($page*100));
111 $page++; 105 $page++;
112 if($ids){ 106 if($ids){
113 $ids = array_column($ids,'id','uid'); 107 $ids = array_column($ids,'id','uid');
114 - $result = $mailServer->client->fetch(array_keys($ids),'UID',true); 108 + try {
  109 + $result = $mailServer->client->fetch(array_keys($ids),'UID',true);
  110 + }catch (Throwable $e){
  111 + return 0;
  112 + }
115 foreach ($ids as $uid=>$id){ 113 foreach ($ids as $uid=>$id){
116 if(!isset($result[$uid])){ 114 if(!isset($result[$uid])){
117 - _echo('删除 e '.$email_id.' f '.$folder_id.' u '.$uid.' id '.$id); 115 + _echo('删除 e '.$email_id.' f '.$folder_id.' u '.$uid.' id '.$id.' d '.$db->delete(\Model\listsSql::$table,['id'=>$id]).' fd '.$db->delete('fob_hot_mail',['lists_id'=>$id]));
118 // 删除 如果远程没有,就删除本地 116 // 删除 如果远程没有,就删除本地
119 - $db->delete(\Model\listsSql::$table,['id'=>$id]); 117 +
120 } 118 }
121 } 119 }
122 } 120 }