Проблема написания на С++ кросс-платформенного кода для работы с сетью существует достаточно давно, и для решения этой проблемы было создано некоторое количество библиотек. Но Boost.Asio можно назвать лучшей реализацией среди существующих. На базе Boost.Asio уже построено несколько библиотек (libpion, cpp-netlib), и кроме того, ведется разработка новых. Кроме того, на базе Boost.Asio я спроектировал и разработал подсистему фильтрации для системы фильтрации веб-трафика СКВТ "Дозор-Джет".
К основным возможностям Boost.Asio можно отнести следующие:
Для меня, самым главным преимуществом Boost.Asio (не считая высокой переносимости кода)
является то, что на каждой платформе реализуется наиболее эффективная стратегия работы
(epoll
на Linux 2.6, kqueue
на FreeBSD/MacOSX, Overlapped IO на MS Windows), и то, что
библиотека позволяет использовать разные стратегии — синхронная и асинхронная работа с
сокетами, использование потокового ввода-вывода, совместимого с std::iostream
. И эти
стратегии можно смешивать, например, принимать соединения используя асинхронную обработку
событий, а затем, запускать нить, которая будет использовать синхронный ввод-вывод данных
(пример test-otpc.cpp).
Для демонстрации возможностей Boost.Asio я написал (частично адаптировав примеры из поставки) несколько примеров, реализующих разные стратегии обработки данных (большее количество примеров, можно найти на домашней странице Boost.Asio). Я использовал эти примеры для оценки применимости разных стратегий в своих разработках. Все эти примеры реализуют "тупой" веб-сервер — он принимает запрос, и отдает одну и ту же страницу, независимо от указанного URL. Сейчас выложены следующие примеры (все исходные тексты включают в себя файл common.h):
Для сборки примеров (исходники лежат на github) нужен boost версии 1.35 или выше.
Я думаю, что на основе данной заметки может получится написать более подробную статью, но это задел на будущее, а пока можно задавать мне вопросы :-)
Last change: 05.03.2013 16:54