Для тех кто не в курсе, boost::asio - это библиотека асинхронного ввода-вывода, на данный момент предоставляет работу с tcp, udp и icmp. Не вопрос, а скорее просто поделиться. Оказывается, планировщик асинхронных задач в boost::asio под виндой сделан на честном IOCP (I/O Completition Port). Все что требуется от пользователя - это назначать задачи асинхронного ввода-вывода и определяеть колбеки на их завершене. Вся рутина по менеджменту IO сделана и спрятана за простым и красивым интерфейсом. Если честно - не ожидал что в бусте все будет настолько круто. Весь codeproject-овский IOCP-шный гуан меркнет на фоне boost::asio.
Выдерка из доков: Networking: TCP, UDP and ICMP Timers Serial Ports POSIX-Specific Functionality: UNIX Domain Sockets, Stream-Oriented File Descriptors Windows-Specific Functionality: Stream-Oriented HANDLEs, Random-Access HANDLEs SSL Особенно интересно как там у них сделан SSL - его посмотреть еще не успел.
green видел в рунете сэмпл: на одной стороне честный виндовый CreatePipe, на другой -- asio. _DEN_ вы все еще "рукопашите" с сокетами -- тогда мы идем к вам
Так и не понял я из их лицензии - boost можно использовать только в опенсорцный программах или в любых? И какие требования к не опенсорц программе чтобы не нарушать права авторов boost.
Y_Mur К использованию boost примерно те же требования, что и к использованию STL - используйте в комерческих продуктах сколько угодно и как угодно.
Boost не юзаю, даже не знаю почему, видимо просто не зачем. В связи с чем вопрос, чем всё-таки этот boost::asio так прекрасен? Может тоже буду юзать. С примерчиками пожалуйста.
green, _DEN_ - спасибо - буду потихоньку осваивать. Booster и "Boost не юзаю" - странное сочетание ) Примерчики здесь, но я их тоже пока не пробовал.
А где взрывающийся вертолёт? В смысле я к wsd присоединяюсь - что за бобриха такая? Мы требуем объяснений >:/
Как бы написали внизу кадра в каком-нибудь голивудском фильме - "1.5 YEARS LATER" Boost.Asio оправдал все надежды, и даже более того. Я слежу за этой библиотекой почти с ее первого появления в бусте, и использую в своих проектах последние ~2 года. На данный момент могу сказать со всей уверенностью, что это самая крутая сетевая библиотека, которую только можно себе представить на C++. Никакие сокеты беркли, никакие winsock-и, никакие сурсфоржные гуан-поделки, никакие любые другие библиотеки и рядом не стояли, и даже отдаленно не пытались приблизиться к Boost.Asio. Для того, чтобы в свое время написать свой первый SSL-клиент, который сходил на wasm.ru по HTTPS и получил HTML-страницу в C++, мне понадобилось ровно пять минут (не считая сборки OpenSSL). Для того, чтобы научиться писать многопоточные серверы, равномерно растекающиеся по числу процессоров и ядер компьютера, и использующие его возможности на все 100%, понадобились считанные месяцы. Многопоточность, отказоустойчивость, оптимальность использования ресурсов, отсутствие необходимости в синхронизации данных между потоками (да, да, отнесите свои мутексы, семафоры, критические секции, эвенты, многопоточные сигнал-слоты, и т.д. на помойку) - всеми этими качествами будет обладать сервер, написанный на азио при его правильном использовании. А теперь одна история из реальной жизни. Где-то год назад у нас была одна очень-очень супер-важная дема, нужно было показывать систему очень крупному заказщику. К этому времени центральный сервер, который девелопился около года, и использовал winsock, уже разваливался на части - с одной стороны из-за определенных ошибок в проектировании, допущенных мной, с другой - из-за постоянного подгоняния со стороны кастомера, мол надо это, а теперь еще это, а теперь еще и вот это, а первое давай выкинем, с третьей - из-за отсутствия опыта в некоторых предметных областях на начальной стадии девелопмента. Еще было в-четветых, в-пятых, и, может быть, в-шестых. До демы оставалась неделя, когда я понял, что сервер набрал критическую массу дефектов, и что исправить все showstoppers до демы просто невозможно, т.к. заплатки покрывали сервер в три слоя, и любое тыкание пальцем в одном месте приводило к отваливанию чего-то в другом месте. Сервер не мог проработать дольше часа чтобы не упасть. Подумав над ситуацией, и взвесив все "за" и "против", я решил, что нужно сделать ответственный шаг. Я закрыл студию, пошел подышал свежим воздухом, вернулся, открыл студию, выбрал "создать новый проект", и переписал весь сервер со всей его функциональностью с нуля на Boost.Asio за 2 дня. Правда эти два дня имели где-то по 16-18 рабочих часов, но все же это не год, как было с прошлым серваком. Дема прошла удачно Кастомеру я конечно же ничего не сказал, поскольку не хотел, чтобы он поседел в свои 30 с небольшим лет. Потом, когда дема уже прошла и все было позади, конечно я все рассказал, что вызвало у него смесь дикого восторга и разноцветного шитбригса, но тогда это уже было не страшно Если старый сервак падал каждые 30-60 минут, то новый, на сколько мне известно, за этот год не упал ни разу. Задавайте свои вопросы.
_DEN_ ну какбэ те кто пишут на С++ , юзают буст , и пишут сетевой софт со своими протоколами - те и так юзают асио. однако асио - это просто обертка на сокетами. для протоколов типа http \ soap \ etc проще использовать библиотеки предназначенные для них, а не велосипеды на асио. также могу добавить, что асио великолепно сочетается с лямбдами С++0х алсо рекомендую почитать блог автора асио в любом случае, на этом форуме далеко не все оценят асио
GoldFinch Ага, а сокеты - это просто обертка над драйвером, а драйвер - это просто обертка над портами ввода-вывода. Вообще не ожидал от тебя такого высказывания, т.к. термин "обертка" обычно используют нубы, для которых единственный критерий оценки качества программы, это "программа работает". Азио - это не просто обертка над сокетами. Это полноценная библиотека асинхронного ввода-вывода. Между двумя этими понятиями такая бездонная пропасть, что в телескоп другого края не увидишь.
Не знал надо будет присмотреться. Зная себя сколько я воевал с сетью скажу. Это верное решение наберешься за год шишек, а потом уже понимаешь надо всё переписать. Тут дело скорее не столько в АСИО сколько в шишках. Не могу не согласиться с тем что АСИО по интерфейсам на порядок удобнее всего прочего.
_DEN_ не надо так сразу про нубов. Просто посмотрите на это с другой стороны - всю реальную работу выполняет ОС. В винде порты завершения, во фряхе kevent. Все что есть в асио - это называется ОБЕРТКА над этими системными механизмами. По определению. В асио нет кода который непосредственно выполняет какую-то работу. Там есть код который предоставляет удобный доступ к системным механизмам - конвертирует буферы, вызывает функторы-handler'ы, преобразует системные ошибки в исключения, etc. Максимум что там есть из алгоритмов - это код transfer_all и read_until. Вот например libcurl - это не обертка на сокетами, опять же по определению. Там есть код который выполняет какую-то реальную работу, парсит\генерит заголовки, конвертирует данные, etc, etc. А асио по сравнению с ней - это просто С++ интерфейс к АПИ ОС. За сим предлагаю тут не оффтопить, а если хочется - перенести обсуждение в личку, аську и т.п.
Pavia Понятное дело, что сама по себе азио - не панацея. Какая бы хорошая не была винтовака, к ней все равно еще нужен хороший снайпер. Просто писать программу на сокетах или на азио - такая же разница как быть гастарбайтером или гендиректором строительной компании. Оба решают одну и ту же задачу, но с принципиально разной эффективностью. GoldFinch Давай просто каждый останется при своем мнении. Не вижу смысла спорить.