POCO (или C++ Portable Components) — это коллекция библиотек классов с открытым исходным кодом, которая упрощает и ускоряет разработку сетевых мультиплатформенных приложений на C++. Библиотеки хорошо интегрируются со Стандартной библиотекой шаблонов (STL) и органично заполняют множество функциональных пробелов в ней. Модульная структура и эффективная реализация делает POCO идеальным кандидатом для использования в разработке для встраиваемых устройств (прошивки и прочее), область, в которой C++ становится все более и более популярным, так как подходит как для низкоуровневой (устройства ввода-вывода, обработчики прерываний и прочее), так и для высокоуровневой объектно-ориентированной разработки. Естественно, POCO подходит и для разработки корпоративных приложений.
Библиотеки POCO освобождают разработчика от необходимости повторной реализации типовых задач, которая могла бы повлечь опечатки, неточную реализацию спецификаций и неверную обработку ошибок.
Цели и миссия POCO создан для сетевых мультиплатформенных программных комплексов на C++, таких, как Cocoa от Apple для Mac OS X или Ruby on Rails для Web-разработок. Он был задуман как мощная и вместе с тем простая в использовании платформа.
POCO построен с жёстким соблюдением C++ стандарта ANSI/ISO, включающего стандартную библиотеку. Версии 1.x используют стандарт C++ 2003 (начиная с версии 1.4.7 частично поддерживается C++ 2011), к версии 2.x готовится полный переход на стандарт C++ 2011 и прекращение поддержки компиляторов, не поддерживающих этот стандарт. Разработчики POCO стремятся хранить равновесие между использованием сложных механизмов C++ и удержанием классов и кода в понятном и простом состоянии.
Возможности Parallelism & concurrency: потоки, синхронизация потоков и расширенные абстракции многопоточного программирования I/O и файловая система: потоки ввода/вывода (streams) и взаимодействие с ФС Поддержка разделяемых библиотек и классов Логгирование: расширенные возможности ведения логов и отчётов об ошибках Безопасность Сетевое программирование: TCP/IP сокеты, HTTP, FTP, SMTP XML: разбор и генерация с использованием приёмов SAX2 и DOM Работа с JSON Обработка файлов конфигурации Работа с базами данных Регулярные выражения (на базе PCRE) Классы Any и DynamicAny для поддержки динамической типизации Классы, поддерживающие работу с датой и временем (Timestamp, Timespan, DateTime, LocalDateTime) Потоковые классы для работы с архивами Криптография на базе OpenSSL
Платформы и совместимость POCO запускается на различных платформах, включая: Windows Mac OS X (embedded) Linux HP-UX Tru64 Solaris QNX
До версии 1.4.0 сетевая подсистема POCO для Linux по умолчанию использует плохо масштабируемый на высокие нагрузки системный вызов select. Существуют реализации этой подсистемы, использующие вызовы poll или epoll. Они предназначены для преодоления ограничения select на максимальный номер файлового дескриптора (обычно 1024). В приложениях, использующих POCO и обслуживающих десятки тысяч клиентов одновременно, использование select может приводить к отказу в обслуживании и падению приложения — и poll, и epoll-реализации решают эту проблему. Начиная с версии 1.4.0, по умолчанию для сборки в Linux-средах используется epoll-реализация:
Используйте epoll вместо select в Linux. Методы Poco::Net::Socket::select() и Poco::Net::Socket::poll() используют epoll под Linux, если сетевая библиотека скомпилирована с флагом -DPOCO_HAVE_FD_EPOLL. Эта конфигурация является стандартной для Linux, но не для различных встраиваемых Linux-платформ.
Пример использования (MSVS 8.0) 1) Устанавливаем библиотеку: Распаковываем (например, в C:\Poco) и прописываем в переменных окружения два пути: POCO_BASE=C:\Poco PATH=$(PATH);C:\Poco\bin
2) Собираем библиотеку: Открываем C:\Poco\bin\Foundation_vs80.sln и собираем его, получаем C:\Poco\bin\PocoFoundation.dll
3) Открываем пример (рассмотрим Logger): C:\Poco\Foundation\samples\Logger\Logger_vs80.vcproj //Файл Logger.cpp using Poco::Logger; using Poco::PatternFormatter; using Poco::FormattingChannel; using Poco::ConsoleChannel; using Poco::FileChannel; using Poco::Message;
int main(int argc, char** argv) { // set up two channel chains - one to the // console and the other one to a log file. FormattingChannel* pFCConsole = new FormattingChannel(new PatternFormatter("%s:%p:%t")); pFCConsole->setChannel(new ConsoleChannel); pFCConsole->open();
FormattingChannel* pFCFile = new FormattingChannel(new PatternFormatter("%Y-%m-%d %H:%M:%S.%c %N[%P]:%s:%q:%t")); pFCFile->setChannel(new FileChannel("sample.log")); pFCFile->open();
// create two Logger objects - one for // each channel chain. Logger& consoleLogger = Logger::create("ConsoleLogger", pFCConsole, Message::PRIO_INFORMATION); Logger& fileLogger = Logger::create("FileLogger", pFCFile, Message::PRIO_WARNING);
// log some messages consoleLogger.error("An error message"); fileLogger.error("An error message");
consoleLogger.warning("A warning message"); fileLogger.error("A warning message");
consoleLogger.information("An information message"); fileLogger.information("An information message");
Logger::get("ConsoleLogger").error("Another error message");
return 0; } ------------- Результат работы (на экране) ------------- <nowiki> ConsoleLogger: Error: An error message ConsoleLogger: Warning: A warning message ConsoleLogger: Information: An information message ConsoleLogger: Error: Another error message </nowiki> ------------- Результат работы (в файле sample.log) ------------- <nowiki> 2007-10-11 10:12:19.8 WKS-323:FileLogger:E:An error message 2007-10-11 10:12:19.9 WKS-323:FileLogger:E:A warning message 2007-10-11 10:12:23.5 WKS-323:FileLogger:E:An error message 2007-10-11 10:12:23.6 WKS-323:FileLogger:E:A warning message </nowiki>
Примечания
См. также Boost Список библиотек языка C++ Loki
Ссылки Главная страница проекта POCO Репозиторий проекта на GitHub Описание библиотеки POCO на Crossplatform.ru материал доступен под GNU FDL Portable Components, кроссплатформенная библиотека для C++ Aleksandar Fabijanic, Dynamic Any, Part 1, ACCU Overload 86 (August 2008) Aleksandar Fabijanic, Dynamic Any, Part 2, ACCU Overload 87 (October 2008) Владислав Хохряков, Cross-compile POCO из Windows для Linux
Категория:Библиотеки C++