LINUX.ORG.RU
ФорумAdmin

PHP > HTTP > local proxy > HTTPS > resource

 ,


0

1

Привет!

Есть php процессы, которые шлют запросы на разные внешние https api, используя curl. Все отлично, но проблема в том, что curl в каждом новом php процессе при обращении к внешним api заново создает tcp connect и ssl handshake, а при умирании процесса все соединения закрываются. Коннект к удаленному ресурсу и handshake создают определенную задержку, от которой хочется избавиться.

То есть сейчас все выглядит так: PHP >>>HTTPS>>> RESOURCE

Напрашивается решение - добавить локальный прокси, коннект к которому был бы очень быстрым, а общение шло вообще без шифрования. А задача этого прокси держать пул хендшейкнутых коннектов к внешним ресурсам.

То есть хочется схему: PHP >>>HTTP>>> LOCAL-PROXY >>>HTTPS>>> RESOURCE

Что можно использовать в качестве такой прокси? Спасибо!



Последнее исправление: func (всего исправлений: 1)

Ответ на: комментарий от vedowi6419

А что, есть какие-то альтернативы, которые бы позволяли переиспользовать коннекты и работать с этим пулом из php?

Под использовать curl я имел ввиду, что мы используем пыховский биндинг к libcurl. Я, разумеется, не вызываю curl в отдельном процессе с помощью php скрипта.

func
() автор топика
Ответ на: комментарий от func

ээээ, я не знаю, почему ты прицепился к пулу, который противоречит самой идее HTTP, но ты описываешь Connection keep-alive. я не очень хорошо понимаю по-пехапешному, но soapclient точно умеет передавать заголовки, а вот насчёт пехапешных биндингов к curl я очень сомневаюсь

vedowi6419
()

Так похапе же умеет $fp = fsockopen( 'ssl://' . SERVER, 443, $errno, $errstr );

Открой соединение в своём похапе и долби хост запросами, не забывая fwrite( $fp, "Connection: keep-alive\r\n" ); в заголовке каждого запроса добавлять, если сервак вообще keep-alive умеет. По окончании fclose( $fp );. HTTP прост как 3 копейки, проще и быстрее самому его написать под конкретную задачу, чем с curl и пр. заморачиваться.

Если сервак keep-alive не умеет, то и твоя схема не поможет.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 2)
Ответ на: комментарий от Stanson

Если бы мы отсылали кучу запросов к внешним ресурсам в рамках ОДНОГО процесса, то этого вопроса бы и не стояло (даже с curl’ом, который умеет и Keep alive и переиспользование хэндлеров и т.д.). Но у меня процессы, порожденные php-fpm’ом, которые «рождаются» на один запрос, и умирают, закрывая за собой все хэндлеры. Именно поэтому стоит вопрос поддержания коннектов внешними средствами.

func
() автор топика
Ответ на: комментарий от func

а должен стоять вопрос о профпригодности. впрочем, это лирика — как правильно работать с соединениями ты видимо знаешь, но не хочешь, а помогать тебе найти костыль, который идет против основ протокола и логики — ну может кто-то сделал такое, дурных хватает

vedowi6419
()
Ответ на: комментарий от vedowi6419

Сорян, но между строк я читать не умею. Поясни пожалуйста, что ты конкретно имеешь ввиду и дай наводку - как это реализовать в контексте php?

Что такого плохого в желании переиспользовать коннект - совсем не понимаю… Может быть мы друг друга не понимаем и мне стоит вообще на примере системных вызовов (например strace лога) показать. Возможно я неправильно выражаюсь и из-за этого происходит недопонимание…

В любом случае, спасибо за то что реагируешь.

func
() автор топика
Ответ на: комментарий от func

если тебе нужен постоянный коннект, а используемый тобой инструмент убивает его вместе с коннектом — алло, надо не подставлять костыль в виде «пула HTTPS соединений» которые каким-то образом будут матчиться и потом переиспользоваться, а не рвать коннект. если используемый тобой инструмент этого не позволяет — возьми другой, делать HTTP вызовы — это не ракеты в космос запускать, все от начала до конца можно самому сделать.

vedowi6419
()
Ответ на: комментарий от vedowi6419

Окей, я тебя понял. Твое решение - не использовать php (во всяком случае ванильный, про какой-нибудь react php речи не идет).

Есть большой проект, который работает, приносит деньги, на этот проект работает много людей, в т.ч. прогеров и админов. И тут я такой с предложением заюзать Go/nodejs/C/C++/Rust/React PHP/whatever.

Хотя я сейчас подумал, ты видимо имеешь ввиду, что мы используем curl в php, а надо написать все самому на сокетах. Написать на сокетах не проблема, но это ничего не решит, т.к. если процесс умирает (во всяком случае через exit, а не через _exit), то ядро киляет все хэндлеры.

func
() автор топика
Ответ на: комментарий от func

у меня процессы, порожденные php-fpm’ом, которые «рождаются» на один запрос, и умирают, закрывая за собой все хэндлеры

Твое решение - не использовать php (во всяком случае ванильный, про какой-нибудь react php речи не идет)

ты тупой. не удивлюсь, если fpm на самом деле может спокойно не убивать процесс, просто ты этого не осилил.

P.S. поверхностный гуглинг показывает что да, умеет. ну то есть вопрос действительно твоей профпригодности

vedowi6419
()
Последнее исправление: vedowi6419 (всего исправлений: 1)
Ответ на: комментарий от vedowi6419

Ты дубина поверхностная, как и твое гугление. Наверное начитался про спаунинг в php-fpm, но это совсем про другое… Ссылку в студию.

func
() автор топика

в качестве прокси можешь использовать nginx

пожалуйста

zgen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.