Intereting Posts
doctrine2: в двунаправленных отношениях «один ко многим», как сохранить с обратной стороны? Преобразование английских цифр в арабские цифры Получить номер недели (в год) с даты PHP Есть ли способ, которым я применяю эту ошибку PHP, если я использую переменную uninitialized / undefined? использование usort с ассоциативным массивом внутри контроллера symfony2 Выбор случайного элемента из ассоциативного массива PHP PHP блокировать текстовый файл для редактирования? Что более эффективно для отправки обновлений WebSocket с изменением базы данных MySQL Создать файл .ics динамически PHPunit – ошибки phpmyadmin, отображающий странные символы (utf8) Вычисление факторического ранга перестановки (N выбрать K) Как подражать MySQLs utf8_general_ci сопоставление в сравнении строк PHP Как заставить класс загрузки файлов CodeIgniter принимать все расширения? CodeIgniter & DBForge – создание базы данных и таблиц

Как открыть несколько соединений сокетов и выполнить обратные вызовы в PHP

Я пишу код, который обрабатывает очередь элементов. Как это работает:

  1. Получите следующий элемент, помеченный как подлежащий обработке из строки базы данных mysql.
  2. Запросите некоторую информацию из API Google с помощью Curl, подождите, пока информация не будет возвращена.
  3. Сделайте оставшуюся часть обработки на основе возвращенной информации.
  4. Отметьте элемент, обработанный в db, перейдите к следующему элементу.

Проблема в том, что на шаге 2. Google иногда занимает 10-15 секунд, чтобы вернуть запрошенную информацию, в течение этого времени мой скрипт должен оставаться остановленным и ждать.

Мне интересно, могу ли я изменить код, чтобы сделать следующее:

  1. Получите следующие 5 предметов, которые будут обработаны, как обычно.
  2. Запросить информацию для пунктов 1-5 из Google, один за другим.
  3. Когда информация для элемента 1 возвращается, должен быть выполнен «обратный вызов», который вызывает функцию или иным образом вызывает некоторый код, который затем выполняет оставшуюся часть обработки на элементах 1-5.
  4. И затем сценарий начинается до тех пор, пока все незавершенные элементы в db не будут помечены обработанными.

Как можно достичь такого?