кто-то делал PHP-демоны на базе libevent ?

полудух

Итсист
http://phpclub.ru/talk/threads/Тонкий-принцип-работы-сокетов-php.79298/
Как раз для этих целей (обработка множества соединений в одном процессе) libevent и сделано.
вы говорите, что с libevent не нужны форки и можно каждый запрос "вешать" на минуту?

ссылка отличная, спасибо )
 

MiksIr

miksir@home:~$
Или libevent или форки, да. Технически ничто не мешает их объединить, но никакого профита тут не вижу.
Единственный полезный вариант их объединения - это prefork схемы, когда дети форкаются заранее, а мастер-процесс распределяет соединения по детям.
 

полудух

Итсист
Единственный полезный вариант их объединения - это prefork схемы, когда дети форкаются заранее, а мастер-процесс распределяет соединения по детям.
по сути это выглядит, как 2 демона запустить на разные порты

так, значит раз у меня 1-разовая передача команд, а не подгрузка новых данных при постоянном подключении, значит буферы не нужны?
тогда, если с libevent и без буферов, то просто в onAccept() поюзать fread(), как вы там писали?
кстати, почему fread(), а не socket_read() ?
 
Последнее редактирование:

полудух

Итсист
Или libevent или форки, да. Технически ничто не мешает их объединить, но никакого профита тут не вижу.
Единственный полезный вариант их объединения - это prefork схемы, когда дети форкаются заранее, а мастер-процесс распределяет соединения по детям.
кстати, игровой сервер
 

полудух

Итсист
http://phpclub.ru/talk/threads/Тонкий-принцип-работы-сокетов-php.79298/
Как раз для этих целей (обработка множества соединений в одном процессе) libevent и сделано.
кстати, чё-то у меня эта обработка идёт последовательно, а не параллельно
т.е. многопоточность где? я думал тут речь про неё...
я повесил sleep(5) и он через 5 сек каждый запрос обрабатывает (в лог пишет)
т.е. получается, что без форков её не достичь?
 

fixxxer

К.О.
Партнер клуба
Ни к какой многопоточности libevent отношения не имеет.
Его смысл исключительно для i/o bound приложений, то есть для тех случаев, когда с классическим "блокирующим" подходом 90% времени приложение будет находиться в ожидании поступления информации по сети - смысл в том, чтобы не ждать, а обрабатывать массу сетевых соединений параллельно и запускать соответствующий обработчик, как только откуда-то данные прилетели, и обработчики при этом должны быть легкие, иначе весь смысл теряется.

С cpu bound (вычисления) - только форки или ядерные треды.
 

полудух

Итсист
Ни к какой многопоточности libevent отношения не имеет.
Его смысл исключительно для i/o bound приложений, то есть для тех случаев, когда с классическим "блокирующим" подходом 90% времени приложение будет находиться в ожидании поступления информации по сети - смысл в том, чтобы не ждать, а обрабатывать массу сетевых соединений параллельно и запускать соответствующий обработчик, как только откуда-то данные прилетели, и обработчики при этом должны быть легкие, иначе весь смысл теряется.

С cpu bound (вычисления) - только форки или ядерные треды.
так суть моего вопроса в чём, - а где же его параллельность то?
с одной стороны говоришь "никакой многопоточности", а с другой "параллельно обрабатывать и запускать"
т.е. libevent с одной стороны может сразу все подключения принять, а с другой он их все в очередь складывает...
я так понял, его параллелизм заканчивается на обработчике, в котором уже надо форки плодить
я делаю демона, который запускает именно долгие, тяжёлые команды с диска, получая команды извне
 

MiksIr

miksir@home:~$
Во времена одного ядра тоже говорили про параллельность, но ядро то одно.
Если у вас блокирующие долгие операции, то вам никакой libevent нужен. Делайте обычный accept+fork.
C диском тоже можно работать асинхронно, но это уже не уровень PHP.
 

полудух

Итсист
Во времена одного ядра тоже говорили про параллельность, но ядро то одно.
Если у вас блокирующие долгие операции, то вам никакой libevent нужен. Делайте обычный accept+fork.
C диском тоже можно работать асинхронно, но это уже не уровень PHP.
строго говоря, мне просто не нравится концепция while(1){}
libevent как-то приятнее просто
 

AnrDaemon

Продвинутый новичок
"Мне не нравится концепция современных компьютеров!" - сказал он.
 
Сверху