Меню:


Проблема написания на С++ кросс-платформенного кода для работы с сетью существует достаточно давно, и для решения этой проблемы было создано некоторое количество библиотек. Но 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

blog comments powered by Disqus