POCO (коллекция библиотек классов C++)

POCO (или C++ Portable Components) — это коллекция библиотек классов с открытым исходным кодом, которая упрощает и ускоряет разработку сетевых мультиплатформенных приложений на C++. Библиотеки хорошо интегрируются со Стандартной библиотекой шаблонов (STL) и органично заполняют множество функциональных пробелов в ней. Модульная структура и эффективная реализация делает POCO идеальным кандидатом для использования в разработке для встраиваемых устройств (прошивки и прочее), область, в которой C++ становится все более и более популярным, так как подходит как для низкоуровневой (устройства ввода-вывода, обработчики прерываний и прочее), так и для высокоуровневой объектно-ориентированной разработки. Естественно, POCO подходит и для разработки корпоративных приложений.

POCO
Тип библиотека (программирование)
Написана на С++03, частично портирована на C++11
Операционная система Кроссплатформенный
Последняя версия 1.10.1 (10 февраля 2020)
Лицензия Boost Software License
Сайт pocoproject.org

Библиотеки 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[1]. Они предназначены для преодоления ограничения select на максимальный номер файлового дескриптора (обычно 1024). В приложениях, использующих POCO и обслуживающих десятки тысяч клиентов одновременно, использование select может приводить к отказу в обслуживании и падению приложения — и poll, и epoll-реализации решают эту проблему.
Начиная с версии 1.4.0, по умолчанию для сборки в Linux-средах используется epoll-реализация:

POCO C++ Libraries, Release Notes, SF 2977249:

Используйте 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) и прописываем в переменных окружения два пути:

  1. POCO_BASE=C:\Poco
  2. 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;
}

------------- Результат работы (на экране) -------------

ConsoleLogger: Error: An error message
ConsoleLogger: Warning: A warning message
ConsoleLogger: Information: An information message
ConsoleLogger: Error: Another error message

------------- Результат работы (в файле sample.log) -------------

 
2007-10-11 10:12:19.8 WKS-323[1204]:FileLogger:E:An error message
2007-10-11 10:12:19.9 WKS-323[1204]:FileLogger:E:A warning message
2007-10-11 10:12:23.5 WKS-323[312]:FileLogger:E:An error message
2007-10-11 10:12:23.6 WKS-323[312]:FileLogger:E:A warning message

Примечания

  1. Яцкевич Сергей. PoCo, сборка от Спектр Софт (недоступная ссылка) (28 августа 2010). Дата обращения: 8 октября 2010. Архивировано 11 марта 2012 года.

См. также

  • Boost
  • Список библиотек языка C++
  • Loki

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.