1

Ситуация
Я выполняю функцию на уже существующем веб-сайте. С помощью этой функции вы можете импортировать контакты из Google. В любом случае .. Мой босс сказал мне, что я должен использовать Task-Queues, чтобы получить контакты из api. Это связано с тем, что у некоторых людей более 9000 (предназначенных для каламбуров) контактов, и когда эти люди пытаются импортировать свои контакты, это будет очень медленным.с использованием очередей задач Google для получения контактов из API контактов

Вопрос
Как я могу использовать проблемно-очереди, чтобы получить контакты и добавить их 1 на 1 в массив.

Код

$return = array(); 
    if (!empty($contacts['feed']['entry'])) { 
     foreach($contacts['feed']['entry'] as $contact) { 
     //retrieve Name and email address 
      $exploded = explode("/", $contact['id']['$t']); 

      $return[] = array (
       'firstname'=> $contact['gd$name']['gd$givenName']['$t'], 
       'lastname'=> $contact['gd$name']['gd$familyName']['$t'], 
       'email' => $contact['gd$email'][0]['address'], 
       'phoneNumber' => $contact['gd$phoneNumber'][0]['$t'], 
       'city' => $contact['gd$structuredPostalAddress'][0]['gd$city']['$t'], 
       'street' => $contact['gd$structuredPostalAddress'][0]['gd$street']['$t'], 
       'country' => $contact['gd$structuredPostalAddress'][0]['gd$country']['$t'], 
       'birthday' => $contact['gContact$birthday']['when'], 
       'id' => end($exploded), 
      ); 
     } 
    } 
    $google_contacts = $return; 
    unset($_SESSION['google_code']); 
} 
+0

Можете ли вы уточнить? Что такое прецедент? Пользователь отправляет запрос на импорт контактов, система извлекает все контакты из Google и сохраняет их в хранилище? – pgiecek

ответ

1

Первое, что нужно помнить о очереди задач является то, что они выполняются независимо от запроса, который вызвал их, так что вы не можете ждать их, чтобы закончить и вернуть этот массив в user - задача должна хранить его где-то или что-то делать с ним.

start_import.php:

$task = new PushTask('/do_import', $contacts); 
$task->add(); 
echo("Started import job!"); 

do_import.php:

if (!empty($contacts['feed']['entry'])) { 
    foreach($contacts['feed']['entry'] as $contact) { 
    //retrieve Name and email address 
    $exploded = explode("/", $contact['id']['$t']); 

    $return[] = array (
     'firstname'=> $contact['gd$name']['gd$givenName']['$t'], 
     'lastname'=> $contact['gd$name']['gd$familyName']['$t'], 
     'email' => $contact['gd$email'][0]['address'], 
     'phoneNumber' => $contact['gd$phoneNumber'][0]['$t'], 
     'city' => $contact['gd$structuredPostalAddress'][0]['gd$city']['$t'], 
     'street' => $contact['gd$structuredPostalAddress'][0]['gd$street']['$t'], 
     'country' => $contact['gd$structuredPostalAddress'][0]['gd$country']['$t'], 
     'birthday' => $contact['gContact$birthday']['when'], 
     'id' => end($exploded), 
    ); 
    } 
} 

// Do something with $return, like persist it to the Datastore or Cloud Storage... 

app.yaml обработчики Пример:

handlers: 
- url: /do_import 
    script: do_import.php 
- url: /start_import 
    script: start_import.php 

И, конечно, это помогает читать документы для Дополнительная информация:

Использование пустых очередей в PHP https://cloud.google.com/appengine/docs/php/taskqueue/overview-push

Смежные вопросы