libev

sollariss

 Я сейчас изучаю libev, раньше использовал libevent. Хочу спросить людей, хорошо знающих эту библиотеку:
 1) Хорошая книжка по либеву есть? Вот у либевента есть http://www.wangafu.net/~nickm/libevent-book/ там 90% реально нужного функционала описано. По либев я пока не нашел ничего сравнимого по полноте раскрытия темы.
 2) Почему либев, а не либевент? Я много слышал заявлений в духе "все переходят на либев".
 А почему? В качестве одной из мотиваций - баги либевента. Лично мне известна одна серьезная принципиальная проблема: ограниченная многопоточность, в либевенте нельзя передавать открытое соединение в другой тред, т.е. ответчать должен тот же поток, который начал читать. Это неприятно, особенно если нужно поддерживать кипалайв, но я к этому привык.
 3) В либевенте есть много полезных штуковин. Кроме http сервера в коробке, без которого обойтись можно, есть очень удобные буферы (bufferevent). В примерах по либев, которые я видел, ничего подобного нет - буферы приходится писать самостоятельно. Велосипед изобретать не хочется, наверняка кто-то уже написал удобные средства для буферизации над сокетами.

doublemother

Лично мне известна одна серьезная принципиальная проблема
Я встречал их больше. Например, dns там — кривой, в ipv6-only средах его разрывает к хуям. Под нагрузкой иногда ему становится хреново и он начинает при добавлении ивента выдавать странные ошибки типа ENOENT.

Werdna

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

sollariss

 Почему? У меня вообще никакого "основного потока" не было, все равноправные.

sollariss

Под нагрузкой иногда ему становится хреново и он начинает при добавлении ивента выдавать странные ошибки типа ENOENT.
Вот это кстати в какой версии либевента наблюдалось? Это какая-то известная бага?

zya369

ввод-вывод надо делать ТОЛЬКО из основного потока.
обоснуй что ли

doublemother

Вот это кстати в какой версии либевента наблюдалось? Это какая-то известная бага?
Я не ходил в багтрекер. У меня libevent использовался в питоновском gevent, я отследил проблему только до момента, где идёт добавление эвента, проверил, что он там валидный и забил — в gevent 1.0 один фиг тоже перешли на libev, а возиться мне не хотелось.
Версия была 1.4.14b-stable, последняя на тот момент в 1.4-ветке.

sollariss

Старье. Со времен 1.4 кучу багов повыловили.
Сейчас актуален 2.0 стабильный. И он в убунте даже ставится из репозитория.

sollariss

Напоролся на свежачок. Либевент, пишу в буффер вывода на стороне клиента, если сервер только что срубили через ctrl+c получаю сегфолт. Похоже это связано с тем, что недавно в убунте пакет либевента проапдейтился. Три дня назад такой проблемы не было.

Werdna

сервер только что срубили через ctrl+c
это как такое возможно?
сервер отпускает управляющую консоль, срубить можно только сигналом.
если обработчики сигналов написаны все правильно, то сегфолтов быть не должно никаких.
Оставить комментарий
Имя или ник:
Комментарий: