Interested Article - POCO (коллекция библиотек классов C++)
- 2020-04-09
- 1
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. Существуют реализации этой подсистемы, использующие вызовы
или
. Они предназначены для преодоления ограничения 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-платформ.
Оригинальный текст (англ.)fixed SF# 2977249: Use epoll instead select under Linux Poco::Net::Socket::select() and Poco::Net::Socket::poll() will use epoll under Linux if the Net library is compiled with -DPOCO_HAVE_FD_EPOLL. This is the default for the Linux build configuration (but not for the various build configurations targeting embedded Linux platforms).
Пример использования (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;
}
------------- Результат работы (на экране) -------------
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
Примечания
- Яцкевич Сергей. (28 августа 2010). Дата обращения: 8 октября 2010. Архивировано из 11 марта 2012 года.
См. также
Ссылки
- (англ.)
- (англ.)
- (рус.) материал доступен под GNU FDL
- (рус.)
- от 13 мая 2011 на Wayback Machine (англ.)
- от 13 мая 2011 на Wayback Machine (англ.)
- (рус.)
|
В статье есть список
источников
, но
не хватает
сносок
.
|
- 2020-04-09
- 1