[Moscow.pm] AnyEven::HTTP перед и после fork с сокетами между процессами

Гришаев Анатолий 0body0 на rambler.ru
Ср Окт 9 01:46:48 PDT 2013


AnyEvent::HTTP сохраняет коннекты для повторного использования и после 
fork с ними происходит каша...

Попробуй до fork использовать AnyEvent::HTTP с параметром keepalive => 0


09.10.2013 7:26, ksvs пишет:
> Есть приложение, в котором главный процесс и дочерние общаются между 
> собой по сокетам, используя EV модуль.
> Дочерние процессы получают информацию от главного, делают HTTP 
> запросы, анализируют и возвращают результат главному. В дочерних 
> процессах запросы идут параллельно с использованием либо 
> Net::Curl::Multi, либо AnyEven::HTTP.
>
> Все было отлично, пока не понадобилось в главном процессе перед fork, 
> сделать HTTMP запрос. LWP использовать можно, но не хочется.
> Используемые варианты:
> 1. Делаем первый запрос при помощи AnyEven::HTTP, дочерние работают с 
> Curl - все отлично. Это для проверки.
> 2. Делаем первый запрос при помощи AnyEven::HTTP на несуществующий 
> адрес, дочерние работают с AnyEven::HTTP - все нормально.
> 3. Делаем первый запрос при помощи AnyEven::HTTP на существующий 
> адрес, работа AnyEven::HTTP в дочерних процессах зависает. При этом 
> общение между процессами идет: гонял ping для подтверждения того, что 
> EV не завис и система коммуникаций между процессами жива.
>
> Может кто-то сталкивался с таким поведением AnyEven::HTTP?
>
> Сделал максимально простой вариант для теста.
> В нем с первоначальным вызовом AnyEven::HTTP, в дочернем процессе 
> AnyEven::HTTP, стал работать, но очень-очень медленно. Точнее все 
> зависит от того, как карты лягут: без первого вызова время выполнения 
> 1,24 секунды, а с первым - может быть 21 секунд, а может быть 5 секунд.
>
>
> Но ведь с Curl работает отлично. Значит дело не в EV, а в AnyEven::HTTP.
> Для подтверждения этого вместо первого вызова AnyEven::HTTP, сделал 
> просто открытие сокета, EV::WRITE, EV::READ - все работает отлично.
>
> AnyEven::HTTP настраивал, чтобы он закрывал все сокеты. Это перед 
> форком. Да и делается ведь EV::break перед форком.
>
> Интересно понять причину этого.
>
>


-- 
С уважением Анатолий.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20131009/c5297ea0/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm