基本庫
Foundation庫是POCO的心臟.它包含底層平台的封裝層,也包含經常使用的工具類和函式. 包含規定位元組大小整數類型, 轉換整數與位元組順序的函式, Poco::Any 類 (基於 boost::any), 錯誤處理及調試工具, 包含各種異常類和支持斷言. 同時也包含一些記憶體管理類, 包括基於引用計數的智慧型指針,和用與buffer管理及記憶體池的類. 對於字元串的處理, POCO包含一些函式和其他的東西, 串trim操作, 大小寫敏感的比較和大小寫轉換. 以類對Unicode的基本支持:轉換文本的不同編碼, 包括UTF-8 和 UTF-16. 支持格式化和解析數字, 包括sprintf 的類型安全變數. 還提供了基於著名的PCRE 庫的正則表達式。
POCO提供多種變數的日期和時間的處理類。在訪問檔案系統方面, POCO 擁有Poco::File 、 Poco::Path 類, 和 Poco::DirectoryIterator 類.在許多應用程式中,其中一部分需要通知其他部分自己這邊發生的事情. POCO中的Poco::NotificationCenter、 Poco::NotificationQueue 和 events 使這種工作變得容易. 下面的示例顯示如何使用POCO的 events. 示例中, 類Source 的公共event命名為theEvent,該event有一個int型參數. 用戶可調用操作符 +=訂閱改事件和調用-=操作符取消訂閱, 同時傳遞對象指針和成員函式指針.事件可通過調用操作符發射, 見 Source::fireEvent.
POCO 中的stream類已經提到過. stream作為Poco::BinaryReader 和 Poco::BinaryWriter 的參數用於寫二進制數據到流中, 自動、透明地處理位元組順序問題.
在複雜的多執行緒套用中,查找問題和bug的僅有方式就是編寫廣泛的日誌信息. POCO 提供強大可擴展的日誌框架,該框架支持過濾、路由到不同的通道以及格式化日誌信息. 日誌訊息可以寫入console、檔案、Windows 事件日誌、Unix的syslog後台或網路中.如果POCO提供的通道不夠使用,可以很方便的使用新類擴展日誌框架.
對於在運行時裝載(及卸載) 共享庫, POCO提供底層的Poco::SharedLibrary 類. 基於它的Poco::
classLoader 類模板和支持框架, 允許在運行時動態裝載和卸載C++類, 類似於JAVA和.NET. 類裝載框架使得以平台無關的方式編寫應用程式外掛程式成為小菜一碟。
最後, POCO Foundation 包含在不同級別上的多執行緒封裝. 從Poco::Thread 類和一般同步原子(Poco::Mutex, Poco::ScopedLock, Poco::Event, Poco::Semaphore, Poco::RWLock), Poco::ThreadPool 類及支持thread-local 存儲, 到高級別的活動對象(active object)的封裝. 簡單點兒說, 活動對象(active object)是擁有運行於自有執行緒中的方法的類. 這使得異步成員函式調用成為可能— 調用成員函式, 在函式執行期間, 做一堆其他的事情, 然後獲得函式的返回值. 下面的示例展示在POCO中是如何做的. ActiveAdder 類定義一個活動方法add,由addImpl成員函式實現. 在main中調用活動方法產生Poco::ActiveResult also known as a future, 最後獲得函式的返回值。
XML庫
POCO XML 庫支持讀取, 處理及寫XML. 遵循POCO的一個指導原則— 不要試圖重新發明已經存在的工作— POCO's XML 庫支持工業標準SAX (版本2) 及DOM接口, 很多有XML經驗的開發人員對此比較熟悉. SAX,XML的簡單API ,定義了基於事件的XML讀接口. 基於SAX的XML 解析器在讀取XML文檔時但它讀到一個元素時會通知應用程式, 字元數據, 或其他人為定義的XML元素. SAX解析器不需要將整個XML文檔裝載到記憶體中, 因此它可用於高效測解析巨大的XML檔案. 相反, DOM (文檔對象模型) 讓應用程式訪問整個XML文檔, 使用樹形的對象層級. 要達到此目的,POCO提供的 DOM 解析器需要將整個文檔裝載到記憶體. 為減小DOM文檔的記憶體占用量, POCO DOM 實現使用使用字元串spooling,經常使用的字元串如元素和屬性名僅存儲一次. XML 庫基於Expat 開源XML 解析器庫. 基於Expat 的是SAX 接口, 基於SAX接口的是DOM的實現. 對字元串, XML 庫使用std::string, UTF-8編碼. 這是的XML庫與應用程式其他部分的接口變得簡單. 在未來的版本中將提供對XPath 和 XSLT的支持。
Net庫
POCO's Net 庫使得編寫基於網路的套用容易. 不管是套用是簡單的通過純TCP socket傳送數據還是需要完整的內建HTTP server的套用,都可以在Net庫中找到有用的東西。
在最底層, Net庫包含socket類, 支持TCP流和server sockets, UDP sockets, multicast sockets, ICMP 及 raw sockets. 如果需要安全sockets, NetSSL 庫提供支持, 實現使用了 OpenSSL. 基於socket 類提供兩個框架創建TCP伺服器 — 一個是多執行緒伺服器(每個連線一個執行緒, 從執行緒池獲得), 一個是基於Acceptor-Reactor模式的伺服器. 多執行緒 Poco::Net::TCPServer 類及其支持框架也是POCO's HTTP server 實現的基礎. 在客戶端, Net庫提供類與HTTP servers通信, 要使用ftp協定傳送和接收檔案, 使用SMTP傳送郵件訊息 (包括附屬檔案) 和從POP3 server接收郵件。
Util庫
Util 庫的名稱可能會給人一些誤導, 因為它包含了創建命令行和伺服器套用的框架. 包括命令行參數處理支持(校驗, 綁定到配置屬性, etc.) 及管理配置信息. 支持不同的配置檔案格式— Windows形式的 INI 檔案, Java-類型的屬性檔案, XML檔案及Windows註冊表.
對伺服器應用程式,框架提供對Windows服務和Unix後台的透明支持. 每個伺服器套用可以註冊以Windows服務運行, 不需要額外的代碼.當然, 所有的伺服器應用程式仍然可以按命令行方式運行, 這使得測試和調測容易。