*** Java ***
1、Java 全能高效 MVC & REST 開發(fā)框架 Portal-Basic
2、Java 日志切割清理工具 Log-Cutter
*** C++ ***
1、通用高性能 Windows Socket 組件 HP-Socket
2、Windows C++ 應用程序通用日志組件 VC-Logger
一、Java
1、Java 全能高效 MVC & REST 開發(fā)框架 Portal-Basic
Portal-Basic 是一套功能完備的高性能 Full-Stack Web 應用開發(fā)框架,內置可擴展的 MVC Web 基礎架構和 DAO 數(shù)據(jù)庫訪問組件(內部已提供了 Hibernate、MyBatis 與 JDBC DAO 組件),集成了 Action 攔截、Form / Dao / Spring Bean 裝配、國際化、文件上傳下載和頁面靜態(tài)化等基礎 Web 應用組件,提供高效靈活的純 Jsp/Servlet API 編程模型,可完美整合 Spring,支持 Action Convention,能快速開發(fā)傳統(tǒng)風格和 RESTful 風格應用程序,文檔和示例完善,非常容易學習。
Portal-Basic 項目主頁:http://www.oschina.net/p/portal-basic
Portal-Basic在設計之初就充分注重功能、性能與使用體驗。Portal-Basic主要特點:
★ 功能全面:內置穩(wěn)定高效的MVC基礎架構和DAO框架,支持Action攔截、Form Bean / Dao Bean / Spring Bean裝配和聲明式事務,提供國際化、文件上傳下載、緩存和頁面靜態(tài)化等常用Web組件,能滿足絕大部分Web應用的需要。
★ 高度擴展:Portal-Basic通過的plug-in機制可以靈活擴展,Portal-Basic發(fā)布包中自帶的portal-basic-ext-rest和portal-basic-ext-spring均以插件的形式提供,用戶可根據(jù)需要加載或卸載這些插件。應用程序開發(fā)者也可以根據(jù)實際需要編寫自定義插件來擴展Portal-Basic。
★ 強大的整合能力:Portal-Basic是一個Full-Stack框架,同時也是一個開放式框架,可以以非常簡單的方式整合第三方組件。本開發(fā)手冊會詳細闡述如何在Portal-Basic中整合FreeMarker、Velocity、UrlRewrite、EHCache-Web、Spring、Hibernate和MyBaits等常用框架和組件。
★ 高性能:性能要求是Portal-Basic的硬性指標,從每個模塊的設計到每行代碼的實現(xiàn)都力求簡潔高效。另外,Portal-Basic并沒有對JSP/Servet API進行過多封裝,開發(fā)者仍然使用JSP/Servet API開發(fā)應用程序,沒有過多的迂回,性能得到保證。
★ 優(yōu)秀的使用體驗:Portal-Basic的設計目標之一是提供良好的開發(fā)體驗,盡量減少應用程序開發(fā)者的工作,API的設計力求簡單、完整、明確。同時,Portal-Basic為應用開發(fā)提供了大量Util工具,用來處理應用程序開發(fā)過程中通常會遇到的一般性問題,進一步減少應用程序開發(fā)者的工作負擔。
★ 平緩的學習曲線:平緩的學習曲線:學習使用Portal-Basic只需掌握一定的Core Java與JSP/Servlet知識,本開發(fā)手冊會循序漸進闡述每個知識點,每個知識點都會結合完整的示例進行講述,知識點之間前后呼應,確保學習者在學習時溫故知新,融會貫通。
★ 完善的技術支持:除了提供完善的開發(fā)手冊和示例代碼以外,還提供博客和QQ群用于解答使用Portal-Basic過程中碰到的所有問題。
* Portal-Basic 總體架構

* Portal-Basic 應用程序依賴關系

----------------------------------------------------------------
2、Java 日志切割清理工具 Log-Cutter
Log-Cutter 是一個簡單實用的日志切割清理工具。對于服務器的日常維護來說,日志清理是非常重要的事情,如果殘留日志過多則嚴重浪費磁盤空間同時影響服務的性能。如果用手工方式進行清理,會花費太多時間,并且很多時候難以滿足實際要求。例如:如何在每個星期六凌晨3點把超過 2G 大的日志文件進行切割,保留最新的 100M 日志記錄? 網上沒有發(fā)現(xiàn)能滿足本座要求的日志切割工具,因此花了一些閑暇時間自己寫了一個。由于要在多個平臺上使用,為了方便采用 Java 實現(xiàn)。本工具命名為 Log-Cutter,主要有以下特點:
-
- 支持 Linux、Mac 和 Windows 等所有常見操作系統(tǒng)平臺
- 支持命令行交互式運行
- 支持后臺非交互式運行(Linux/MAC 下使用 daemon 進程實現(xiàn),Windows 用系統(tǒng) Service 實現(xiàn))
- 支持兩種日志清理方式(刪除日志文件或切割日志文件)
- 支持對 GB18030、UTF-8、UTF-16LE、UTF-16BE 等常用日志文件類型進行切割(不會發(fā)生切掉半個字符的情況)
- 高度可配置(程序執(zhí)行周期、要刪除的日志文件過期時間、要切割的日志文件閥值和保留大小等均可配置
Log-Cutter 項目主頁:http://ldcsaa.googlecode.com
二、C++
1、通用高性能 Windows Socket 組件 HP-Socket
HP-Socket 是一套通用的高性能 Windows Socket 組件包,包含服務端組件(IOCP 模型)和客戶端組件(Event Select 模型),廣泛適用于 Windows 平臺的 TCP 通信系統(tǒng)。HP-Socket 對通信層實現(xiàn)完全封裝,上層應用不必關注通信層的任何細節(jié);HP-Socket 提供基于事件通知模型的 API 接口,能非常簡單高效地整合到各類應用程序中;另外,為了讓大家能更方便的學習 HP-Socket,特此精心制作了一個功能測試示例(Test Echo)和一個性能測試示例(Test Echo-PFM),用戶可以通過這兩個測試示例入手,迅速掌握組件的設計思想和使用方法。
通用性
- 通信組件的唯一職責就是接受和發(fā)送字節(jié)流,絕對不能參與上層協(xié)議解析等工作;
- 與上層使用者解耦、互不依賴,組件與使用者通過操作接口和監(jiān)聽器接口進行交互,組件實現(xiàn)操作接口為上層提供操作方法;使用者實現(xiàn)監(jiān)聽器接口把自己注冊為組件的 Listener,接收組件通知。因此,任何使用者只要實現(xiàn)了監(jiān)聽器接口都可以使用組件;另一方面,甚至可以自己重新寫一個實現(xiàn)方式完全不同的組件實現(xiàn)給使用者調用,只要該組件遵從組件的操作接口,這也是 DIP 設計原則的體現(xiàn)。
可用性
可用性對所有通用組件都是至關重要的,如果太難用還不如自己重頭寫一個來得方便。因此,組件的操作接口和監(jiān)聽器接口設計得盡量簡單易用(通俗來說就是“傻瓜化”),這兩個接口的主要方法均不超過 5 個。另外,組件完全封裝了所有的底層 Socket 通信,上層應用看不到任何通信細節(jié),不必也不能干預任何通信操作,Socket 連接被抽象為 Connection ID,該參數(shù)作為連接標識提供給上層應用識別不同的連接。
高性能
作為底層的通用組件,性能問題是必須考慮的,絕對不能成為系統(tǒng)的瓶頸。而另一方面,從實際出發(fā),根據(jù)客戶端組件與服務端組件的性能要求采用不同的 Socket 模型。組件在設計上充分考慮了性能、現(xiàn)實使用情景、可用性和實現(xiàn)復雜性等因素,確保滿足性能要求的同時又不會寫得太復雜。做出以下兩點設計決策:
- 客戶端:在單獨線程中實現(xiàn) Socket 通信交互。這樣可以避免與主線程或其他線程相互干擾;I/O 模型選擇 Event Select 通信模型。
- 服務端:采用 Windows 平臺效率最高的 IOCP 通信模型;利用緩存池技術,在通信的過程中,通常需要頻繁的申請和釋放內存緩沖區(qū),建立了動態(tài)緩存池, 只有當緩存池中沒有可用對象時才創(chuàng)建新對象,而當緩存對象過多時則會壓縮緩存池;另外,組件的動態(tài)內存通過私有堆(Private Heap)機制分配,避免與 new / malloc 競爭同時又減少內存空洞。
伸縮性
可以根據(jù)實際的使用環(huán)境要求設置組件的各項性能參數(shù)(如:工作線程的數(shù)量、各種緩存池的大小、收發(fā)緩沖區(qū)的大小、Socket 監(jiān)聽隊列的大小、Accep 派發(fā)的數(shù)目以及心跳檢查的間隔等)。
HP-Socket 項目主頁:http://ldcsaa.googlecode.com
----------------------------------------------------------------
2、Windows C++ 應用程序通用日志組件 VC-Logger
VC-Logger 是一個簡單易用的 C++ 程序通用日子組件。設計時著重考慮三個方面:
功能: 本日志組件的目的是滿足大多數(shù)應用程序記錄日志的需求 —— 把日志輸出到文件或發(fā)送到應用程序中,并不提供一些復雜但不常用的功能。本日志組件的功能包括:
- 把日志信息輸出到指定文件
- 每日生成一個日志文件
- 對于 GUI 程序,可以把日志信息發(fā)送到指定窗口
- 對于Console應用程序,可以把日志信息發(fā)往標準輸出 (std::cout)
- 支持 MBCS / UNICODE,Console / GUI 程序
- 支持動態(tài)加載和靜態(tài)加載日志組件 DLL
- 支持 DEBUG/TRACE/INFO/WARN/ERROR/FATAL 等多個日志級別
可用性: 本日志組件著重考慮了可用性,盡量讓使用者用起來覺得簡便、舒心:
- 簡單純凈:不依賴任何程序庫或框架
- 使用接口簡單,不需復雜的配置或設置工作
- 提供 CStaticLogger 和 CDynamicLogger 包裝類用于靜態(tài)或動態(tài)加載以及操作日志組件,用戶無 需關注加載細節(jié)
- 程序如果要記錄多個日志文件只需為每個日志文件創(chuàng)建相應的 CStaticLogger 或 CDynamicLogger 對象
- 只需調用 Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等方法記錄日志
- 日志記錄方法支持可變參數(shù)
- 日志輸出格式:<時間> <線程ID> <日志級別> <日志內容>
性能: 性能是組件是否值得使用的硬指標,本組件從設計到編碼的過程都盡量考慮到性能優(yōu)化:
- 支持多線程同時發(fā)送寫日志請求
- 使用單獨線程在后臺寫日志,不影響工作線程的正常執(zhí)行
- 采用批處理方式批量記錄日志
VC-Logger 項目主頁:http://ldcsaa.googlecode.com
CodeProject
原文出處:怪獸的博客 怪獸的微博 怪獸樂園Q群