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

ksvs ksvs1996 на ymail.com
Вт Окт 15 17:25:10 PDT 2013


Так в последнем предложении было сказано, что это учитывается.





On Wednesday, 9 October 2013, 11:47, Гришаев Анатолий <0body0 на rambler.ru> wrote:
 
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 перед форком.
>
>Интересно понять причину этого.
>
>


-- 
С уважением Анатолий.

-- 
Moscow.pm mailing list
moscow-pm на pm.org | http://moscow.pm.org
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20131016/0efeab04/attachment-0001.html>


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