Как понять, что у меня действительно получилось сделать keep-alive соединение на curl?

Добрый день.
Вдохновившись статьёй https://habr.com/ru/post/184302/, я решил переделать пару классов, которые разработаны для интеграции сайта с 1с. Суть простая: когда пользователь ввёл на сайте все данные, на сервер 1С отправляется 5 запросов для создания/проверки некоторых сущностей.
До "оптимизации": Для каждого из 5 запросов выполнялся curl_init перед запросом и curl_close после запроса.
После "оптимизации": Сделал класс Singleton (или типа того), который всегда возвращает один и тот же curl-хэндлер. Затем каждый из классов-запросов ставит свой url и некоторые ставят post-fields (а другие запросы get), и отправляют запросы. И в конце конечно ничего не уничтожаем, так как по идее после выполнения всё должно очиститься само.
Запросы используют инфу друг из друга, так что параллелить их нет смысла.

Засекал время, оно немного уменьшилось, но всё таки я до конца не понял, получилось ли у меня создать постоянное соединение, или нет. Поясните, кто разбирается. Я использовал опцию CURLOPT_VERBOSE чтобы всё записывалось, но не уверен, что правильно читаю логи.
Лог curl до оптимизации - https://codepen.io/Aris96/pen/jOwqLER
Лог curl после оптимизации - https://codepen.io/Aris96/pen/RwgaZWx
IP сервера заменил на ***host***

И ещё беспокоит, что я не использую опции CURLOPT_FORBID_REUSE и CURLOPT_TCP_KEEPALIVE. Пробовал использовать, но ничего не изменилось. Не понимаю, нужно ли их устанавливать и какие у них дефолтные значения. На данный момент без url и post-fields установка параметров у меня выглядит так:
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
            curl_setopt($ch, CURLOPT_USERPWD, AbstractRequest::ONE_C_LOGIN . ':' . AbstractRequest::ONE_C_PASSWORD);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_TIMEOUT, 10);
            curl_setopt($ch, CURLOPT_STDERR, $file);
            curl_setopt($ch, CURLOPT_VERBOSE, true);
  • Вопрос задан
  • 544 просмотра
Решения вопроса 1
kotomyava
@kotomyava
Системный администратор
Re-using existing connection! (#0) with host ***host***
* Connected to ***host*** (***host***) port 80 (#0)

Тут видно, что соединение переиспользуется.

CURLOPT_FORBID_REUSE По умолчанию не активна и выставлять не надо, зачем вам запрет переиспользования соединений?

CURLOPT_TCP_KEEPALIVE Это посылка пакетов для поддержания соединения. В вашем случае вряд-ли нужно - имеет смысл, если запросы редки, и между ними может пройти больше времени чем таймаут keepalive на сервере (обычно это десятки секунд).

То, что разница у вас не велика не не удивительно. Она сильно заметна, если много запросов с очень быстрыми ответами, где время установки соединения занимает значимое время.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы