boost::asio - бобриха будет довольна

Тема в разделе "LANGS.C", создана пользователем _DEN_, 27 апр 2009.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Для тех кто не в курсе, boost::asio - это библиотека асинхронного ввода-вывода, на данный момент предоставляет работу с tcp, udp и icmp.

    Не вопрос, а скорее просто поделиться. Оказывается, планировщик асинхронных задач в boost::asio под виндой сделан на честном IOCP (I/O Completition Port). Все что требуется от пользователя - это назначать задачи асинхронного ввода-вывода и определяеть колбеки на их завершене. Вся рутина по менеджменту IO сделана и спрятана за простым и красивым интерфейсом. Если честно - не ожидал что в бусте все будет настолько круто. Весь codeproject-овский IOCP-шный гуан меркнет на фоне boost::asio.
     
  2. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    _DEN_
    Всё никак не соберусь посмотреть. Операции с файлами, пайпами не поддерживаются?
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Выдерка из доков:

    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 - его посмотреть еще не успел.
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    green
    видел в рунете сэмпл: на одной стороне честный виндовый CreatePipe, на другой -- asio.
    _DEN_
    вы все еще "рукопашите" с сокетами -- тогда мы идем к вам ;)
     
  5. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    _DEN_
    а что за бобриха?
     
  6. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Так и не понял я из их лицензии - boost можно использовать только в опенсорцный программах или в любых? И какие требования к не опенсорц программе чтобы не нарушать права авторов boost.
     
  7. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Y_Mur
    В любых можно.
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Y_Mur

    К использованию boost примерно те же требования, что и к использованию STL - используйте в комерческих продуктах сколько угодно и как угодно.
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Boost не юзаю, даже не знаю почему, видимо просто не зачем. В связи с чем вопрос, чем всё-таки этот boost::asio так прекрасен? Может тоже буду юзать. С примерчиками пожалуйста.
     
  10. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    green, _DEN_ - спасибо - буду потихоньку осваивать.

    Booster и "Boost не юзаю" - странное сочетание :))
    Примерчики здесь, но я их тоже пока не пробовал.
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Тем, что все сделано через IOCP. Ну или почти все.
     
  12. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    А где взрывающийся вертолёт? :)
    В смысле я к wsd присоединяюсь - что за бобриха такая?
    Мы требуем объяснений >:/
     
  13. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Как бы написали внизу кадра в каком-нибудь голивудском фильме - "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 минут, то новый, на сколько мне известно, за этот год не упал ни разу.

    Задавайте свои вопросы.
     
  14. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    _DEN_
    ну какбэ те кто пишут на С++ , юзают буст , и пишут сетевой софт со своими протоколами - те и так юзают асио.

    однако асио - это просто обертка на сокетами.
    для протоколов типа http \ soap \ etc проще использовать библиотеки предназначенные для них, а не велосипеды на асио.

    также могу добавить, что асио великолепно сочетается с лямбдами С++0х
    алсо рекомендую почитать блог автора асио


    в любом случае, на этом форуме далеко не все оценят асио
     
  15. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    GoldFinch

    Ага, а сокеты - это просто обертка над драйвером, а драйвер - это просто обертка над портами ввода-вывода. Вообще не ожидал от тебя такого высказывания, т.к. термин "обертка" обычно используют нубы, для которых единственный критерий оценки качества программы, это "программа работает".

    Азио - это не просто обертка над сокетами. Это полноценная библиотека асинхронного ввода-вывода. Между двумя этими понятиями такая бездонная пропасть, что в телескоп другого края не увидишь.
     
  16. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Не знал надо будет присмотреться.


    Зная себя сколько я воевал с сетью скажу. Это верное решение наберешься за год шишек, а потом уже понимаешь надо всё переписать. Тут дело скорее не столько в АСИО сколько в шишках. Не могу не согласиться с тем что АСИО по интерфейсам на порядок удобнее всего прочего.
     
  17. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    _DEN_
    не надо так сразу про нубов.

    Просто посмотрите на это с другой стороны - всю реальную работу выполняет ОС. В винде порты завершения, во фряхе kevent. Все что есть в асио - это называется ОБЕРТКА над этими системными механизмами. По определению.

    В асио нет кода который непосредственно выполняет какую-то работу. Там есть код который предоставляет удобный доступ к системным механизмам - конвертирует буферы, вызывает функторы-handler'ы, преобразует системные ошибки в исключения, etc. Максимум что там есть из алгоритмов - это код transfer_all и read_until.

    Вот например libcurl - это не обертка на сокетами, опять же по определению. Там есть код который выполняет какую-то реальную работу, парсит\генерит заголовки, конвертирует данные, etc, etc.
    А асио по сравнению с ней - это просто С++ интерфейс к АПИ ОС.

    За сим предлагаю тут не оффтопить, а если хочется - перенести обсуждение в личку, аську и т.п.
     
  18. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Pavia
    Понятное дело, что сама по себе азио - не панацея. Какая бы хорошая не была винтовака, к ней все равно еще нужен хороший снайпер. Просто писать программу на сокетах или на азио - такая же разница как быть гастарбайтером или гендиректором строительной компании. Оба решают одну и ту же задачу, но с принципиально разной эффективностью.

    GoldFinch
    Давай просто каждый останется при своем мнении. Не вижу смысла спорить.