0xd34df00d
12.04.2012 22:45 Azoth
SCGI неплох, парсер пишется в 5 строк и ваще одно удовольствие, Boost.Asio тоже одно удовольствие поебывать, все так мило, мимимишно и разумно, что ваще. Даже получше, чем QTcpSocket, лол, да и можно обмазываться хардкорными темплейтами.
В общем, за сегодня набросал сервер, все даже завелось и работает как надо с полпинка. Попытался потестить производительность — хуй там, оно в dmesg срет, что задетектило SYN flood. На локалхосте, ага. Ну и ладно. Сегодня наметил, а завтра доделаю всю бизнес-логику, и там уже можно будет смотреть.
Правда, что-то у меня чувство, что вся эта хуйня в одном потоке идет, ну и ладно пока что.
Блядь, чуваки, интересные проекты делают меня счастливым.
Чтобы было в разных потоках, нужно io_service::run дергать из нескольких, но тогда стоит синхронизацию через io_service::strand сделать.
> Блядь, чуваки, интересные проекты делают меня счастливым.
А ты думаешь я зря тебя пинал на тему личкрафтов уже много-много раз? )
> Правда, что-то у меня чувство, что вся эта хуйня в одном потоке идет
Wait, ты написал сервер и не знаешь, как он работает?
Так и делаю, но забивание в обработчик считывания данных ненужного цикла и хуяренье httperf показывает, что только одно ядро загружено, и меня это смущает.
> А ты думаешь я зря тебя пинал на тему личкрафтов уже много-много раз? )
А личкрафты тоже котик :3
> Wait, ты написал сервер и не знаешь, как он работает?
Знаю, но эксперимент расходится с теорией, см. предыдущий коммент.
Я подозреваю, что лоад весь в странде, а сама многопоточность нужна для мультиплексирования соединений, разве нет ?
Э, не понял. У меня есть соединение, мне нужно проверить, корректное ли оно, и если все ок, перенаправить на бекенд. Бекенд подумает и вернет результат. Бекенд можно дергать в несколько соединений сразу. Разве тут няшная многопоточность не вылезет?
Вылезет, у тебя на read из сокета хэндлеры в странде ?)
Да.
Значе делай без странда, чтобы бэкенд мог работать с несколькими. На стороне бэкенда уже всякие синхронизации делать %)
У бекенда и так уже синхронизации.
А если я буду несколько сразу обработок запускать, у меня по пизде все не пойдет, без странда-то?
Нет, race-condition будет только если внутри самих хэнделов есть разделяемые данные. странд — это сериализатор вызовов. А т.к. у тебя бэкенд сам является монитором, то все должно быть четко и без него.
Разделяемые данные внутри хендлеров — только права пользователей, и я подумываю навесить на них отдельные мутексы.
Спасибо за хинты, я если чо тебя еще попинаю :3
Да, если shared_ptr-based design, то std::make_shared и std::move(ptr) сделают твой код счастливей в шиндовс. Я было хотел буферы передавать, как unique_ptr, но азио хоть и энфорсит мувы, где можно, но copy requirement все еще справедливо :(