複製鏈接
請複製以下鏈接發送給好友

POCO

(應用程序)

鎖定
POCO C++ Libraries 提供一套 C++ 的類庫用以開發基於網絡的可移植的應用程序,功能涉及線程、線程同步、文件系統訪問、流操作、共享庫和類加載、套接字以及網絡協議包括:HTTP、FTP、SMTP 等;其本身還包含一個 HTTP 服務器,提供 XML 的解析和 SQL 數據庫的訪問接口。
POCO C++庫是開源的用於簡化和加速C++開發面向網絡、可移植應用程序的C++庫集,POCO庫和C++標準庫可以很好的集成並填補了C++標準庫缺乏的功能空隙。POCO庫的模塊化、高效的設計及實現使得POCO特別適合嵌入式開發。在嵌入式開發領域,由於C++既適合底層(設備I/O、中斷處理等)和高層面向對象開發,越來越流行。當然POCO也準備好了面對企業級挑戰。
包含4個核心庫及一些附加庫. 這4個核心庫是: Foundation, XML, Util 和 Net. 附加庫中其中2個是NetSSL和Data,NetSSL為Net庫中的網絡類提供SSL支持, Data庫提供訪問不同SQL數據庫的一致性接口。 POCO以網絡中心的跨平台C++軟件開發,就像蘋果的Cocoa之餘Mac開發, 或Ruby on Rails 之餘Web開發—強大而不失簡單有趣的用於創建應用的平台. POCO 嚴格使用標準ANSI/ISO C++創建, 包含標準庫. 程序庫的貢獻者試圖在使用C++高級特性、易於理解的類、乾淨的代碼、連續及易於維護間得到平衡。
軟件名稱
POCO
屬    性
應用程序

目錄

POCO基本庫

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, 最後獲得函數的返回值。

POCOXML庫

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的支持。

POCONet庫

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接收郵件。

POCOUtil庫

Util 庫的名稱可能會給人一些誤導, 因為它包含了創建命令行和服務器應用的框架. 包括命令行參數處理支持(校驗, 綁定到配置屬性, etc.) 及管理配置信息. 支持不同的配置文件格式— Windows形式的 INI 文件, Java-類型的屬性文件, XML文件及Windows註冊表.
對服務器應用程序,框架提供對Windows服務和Unix後台的透明支持. 每個服務器應用可以註冊以Windows服務運行, 不需要額外的代碼.當然, 所有的服務器應用程序仍然可以按命令行方式運行, 這使得測試和調測容易。