Я пытаюсь масштабировать/ускорить свое приложение
Поэтому я разрабатываю целевую страницу, которая сохраняет данные и перенаправляет их после сохранения данных. Чтобы сохранить данные, я использовал другую службу на своем сервере, которая получает данные публикации из 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 мс, если это произойдет за счет улучшения кода завивки или альтернативного решения.






1) Попробуйте удалить FRESH_CONNECT, это будет каждый раз создавать новый TCP, а вам это не нужно, если вам нужна скорость.
Когда вы выполняете CURL в первый раз, устанавливается TCP-соединение. Когда данные отправляются, соединение остается активным, поэтому его можно использовать повторно, время по умолчанию — 60 секунд.
Таким образом, это поможет вам со скоростью при каждом звонке после первого в течение 60 секунд.
2) Поскольку вы не используете результат завитка, вы можете поместить данные в очередь и отправить завиток с работником.
Привет, Влад, не могли бы вы поподробнее рассказать о втором пункте? новое соединение оптимизировало мой код за 50 мс. Я также использую среду appengine. Как вы думаете, есть ли альтернатива curl? К вашему сведению, я отправляю данные, но мне не нужно обрабатывать результат
Рад, что мой комментарий помог. Поскольку вы ничего не делаете с результатом curl, вы можете заглянуть в брокеры сообщений, такие как RabbitMQ или любое решение Pub/Sub, которое позволит вам опубликовать сообщение, содержащее $request_url и $postFields, и другой процесс прослушивает очередь и и выполнение завитков. Таким образом, это ускорит работу еще быстрее, поскольку ваш основной скрипт больше не будет ждать завитка. Мне это нравится больше, чем реализация тайм-аутов, которые могут привести к тому, что ваш завиток не будет отправлен.
Итак, я нашел решение для создания асинхронного завитка этого ответа за миллисекунды, а не за секунды.
я заменил
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
С участием
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 50);
Таким образом, я могу ограничить максимальное время записи завитка до 50 мс.
Вы не можете заставить завиток двигаться быстрее. Получите сервер с большей мощностью. Проверьте пропускную способность и задержку сети.