PHP Async Curl POST замедляет мой код на 500 мс

Я пытаюсь масштабировать/ускорить свое приложение

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

Проблема в том, что время выполнения CURL составляет около 700 мс, и когда я удаляю код CURL, я выполняю код за 95-110 мс.

Вот мой пример кода CURL -

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $request_url);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $array);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);
    curl_exec($ch);
    curl_close($ch);

Я хочу снизить время завивки с 700 мс до 50-180 мс, если это произойдет за счет улучшения кода завивки или альтернативного решения.

Вы не можете заставить завиток двигаться быстрее. Получите сервер с большей мощностью. Проверьте пропускную способность и задержку сети.

ryantxr 09.05.2019 08:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
169
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

1) Попробуйте удалить FRESH_CONNECT, это будет каждый раз создавать новый TCP, а вам это не нужно, если вам нужна скорость.

Когда вы выполняете CURL в первый раз, устанавливается TCP-соединение. Когда данные отправляются, соединение остается активным, поэтому его можно использовать повторно, время по умолчанию — 60 секунд.

Таким образом, это поможет вам со скоростью при каждом звонке после первого в течение 60 секунд.

2) Поскольку вы не используете результат завитка, вы можете поместить данные в очередь и отправить завиток с работником.

Привет, Влад, не могли бы вы поподробнее рассказать о втором пункте? новое соединение оптимизировало мой код за 50 мс. Я также использую среду appengine. Как вы думаете, есть ли альтернатива curl? К вашему сведению, я отправляю данные, но мне не нужно обрабатывать результат

Mat Cn 09.05.2019 09:57

Рад, что мой комментарий помог. Поскольку вы ничего не делаете с результатом curl, вы можете заглянуть в брокеры сообщений, такие как RabbitMQ или любое решение Pub/Sub, которое позволит вам опубликовать сообщение, содержащее $request_url и $postFields, и другой процесс прослушивает очередь и и выполнение завитков. Таким образом, это ускорит работу еще быстрее, поскольку ваш основной скрипт больше не будет ждать завитка. Мне это нравится больше, чем реализация тайм-аутов, которые могут привести к тому, что ваш завиток не будет отправлен.

Vlad-Andrei Turtoi 13.05.2019 12:01
Ответ принят как подходящий

Итак, я нашел решение для создания асинхронного завитка этого ответа за миллисекунды, а не за секунды.

я заменил

curl_setopt($ch, CURLOPT_TIMEOUT, 1);

С участием

curl_setopt($ch, CURLOPT_TIMEOUT_MS, 50);

Таким образом, я могу ограничить максимальное время записи завитка до 50 мс.

Другие вопросы по теме