Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Шаринг HTTP/TCP конекшенов между PHP процессами
Форумы портала PHP.SU » » HTTP и PHP » Шаринг HTTP/TCP конекшенов между PHP процессами

Страниц (1): [1]
 

1. KoteKotlyraov - 24 Октября, 2018 - 13:55:54 - перейти к сообщению
Доброго времени суток.

Воспользовался контекстным поиском пару раз (который минут 5 перенаправляет меня на страницу с результатами...), но не смог найти для себя полезной информации касательно моего вопроса.

Мой вопрос можно упростить:
Есть N php скриптов на сервере. Каждый должен обращаться в одну и ту же 3rd party API (с разными запросами).
Может ли один скрипт создать соединение в эту API, которое затем будет использоваться при обработки последующих реквестов (запросы могут быть в разные файлы) ?
А если это не один конекшен а десятки ?
А кто будет менеджить эти соединения ?


Более подробная задача (Отобразить)


Я далёк от PHP, но изучив форумы и документации, я не смог найти чёткого ответа. Есть 3 режима работы Apache начиная с версии 2.4: pre_fork, worker, event. Два последних держат parent процесс, который управляет дочерними listen'арами, которым он передаёт запросы на обработку. По завершению они не очищают всю память, а позволяют держать открытые соединения и прочие ресурсы, которые могут быть использованы при обработке последующих запросов. Но как они менеджат эти рисурсы или как ими можно управлять - я не нашел ни слова.

Режим event создан специльно для Keep-Alive соединений, но у меня другая задача: 1 клиент делает около 1-2 запросов в час(!), мне нужен Keep-Alive не для клиентских соединений, а для самих дочерних процессов, которые занимаются обработкой php запросов.

В документации CURL написано что он умеет "придерживать" сокет открытым некоторое время, что бы его можно было переиспользовать. Так же можно передавать curl handler'ы в методы, что бы указывать каким хендлером нужно делать запрос. PHP умеет curl, curl_multy, и curl_easy (насколько я понял).

Но простой тест на саму CURL либу с двумя bash скриптами которые запускаются по очереди и скачивают файлы с одного домена, показывает (через netstat, к примеру) что сокеты используются разные, значит никакого "глобального системного пула TCP конекшнеов и сокетов для CURL'а нет). Я не смогу хранить этот handler нигде (shared memory, cache, и т.д.) поскольку это не простой объект, а ресурс получается, который должен быть в памяти и который может быть передан для его использования.

Так что же тогда с PHP ? Можно ли такое сделать ? Можно ли создавать десятки curl хендлеров (или сокетов) и переиспользовать их в тысячах скриптах ?

Вот такой вопрос про persistent connections, connection cache, connection pool, sharing connections, HTTP pool, socket pool и так далее, но на уровне Web Server'а...

Увы (Отобразить)



Сейчас инвестигейчу данный вопрос для решения с Nginx + php_fpm. Пока ничего не понятно

 

Powered by ExBB FM 1.0 RC1