專案簡介
HP-Socket 是一套通用高性能 Windows Socket 組件庫,採用服務端 IOCP 模型、客戶端 Event Select 模型,完全封裝通信層細節,提供基於事件通知的 API,支援 C/C++、C#、Delphi 等多語言調用,廣泛應用於 TCP 通信系統開發。
核心設計原則
| 原則 | 具體體現 |
| 通用性 | 僅負責字節流收發,不參與上層協議解析;組件與使用者解耦,通過操作接口與監聽器接口交互,體現 DIP 原則 |
| 可用性 | 接口極簡(核心方法 ≤5),完全封裝底層 Socket,連接抽象為 Connection ID,上層無感知通信細節 |
| 高性能 | 服務端採用 IOCP(Windows 最高效模型);客戶端獨立線程 + Event Select;緩存池技術減少內存分配開銷;私有堆避免 new/malloc 競爭與碎片 |
| 伸縮性 | 工作線程數、緩存池大小、收發緩衝區、監聽隊列、AccepEx 分發數、心跳間隔等參數均可配置 |
架構模型詳解
服務端:IOCP 完成端口模型
- 少量工作線程(通常 = CPU 核心數 × 2)處理海量並發連接。
AcceptEx / WSARecv / WSASend 重疊 I/O 操作完成後,由 IOCP 併發隊列分發至工作線程。
- 緩存池:動態擴縮容,對象復用,避免頻繁 malloc/free。
- 私有堆:
HeapCreate 獨立堆,隔離內存碎片,提升分配速度。
客戶端:Event Select 模型
- 專用通信線程,避免阻塞主線程/UI 線程。
WSAEventSelect 綁定網絡事件(FD_READ、FD_WRITE、FD_CLOSE 等)至事件對象。
WSAWaitForMultipleEvents 等待事件觸發,逐個處理。
- 適合連接數較少、邏輯較簡單的客戶端場景。
v2.2.3 關鍵更新亮點
- 連接 ID 類型重構:引入
CONNID 類型(預設 typedef ULONG_PTR CONNID),應用層可自定義為 ULONG/ULONGLONG 等,統一代碼引用,利於移植維護。
- 服務端連接附加數據:新增
Get/SetConnectionExtra(),支持為每個連接綁定任意業務上下文(如 Session 物件、用戶 ID、協議狀態機),避免外部維护映射表。
- IOCP 工作線程上限放寬:64 → 500,適應高核心數服務器。
- Disconnect 增強:新增
bForce 參數,支持強制斷開(跳過緩衝區發送)與優雅斷開兩種模式。
- 連接 ID 生成規則優化:避免生成 0 值 ID,消除潛在邏輯誤判。
歷史版本關鍵特性回顧
| 版本 | 核心特性 |
| v2.2.2 | 心跳機制優化:重命名 Get/SetKeepAliveTime(),默認間隔 5s/3s,更貼合實際網絡環境 |
| v2.2.1 | PULL 模型支援:新增 IPullSocket::Fetch() 主動拉取數據接口;CIocpPullServer/CPullClientSocket 實現;新增 TestEcho-Pull 測試程序 |
快速上手資源
- 項目主頁:[點擊這裡]
- 下載地址:[點擊這裡]
- 示例程序:
TestEcho(功能驗證)、TestEcho-PFM(性能壓測)、TestEcho-Pull(PULL 模型驗證)
總結
HP-Socket 以「極簡接口、極致性能、極強伸縮性」確立了 Windows 平台高性能網絡組件的標桿地位。v2.2.3 通過類型系統重構、連接上下文綁定、線程擴容等工程化改進,進一步降低了業務接入門檻與維護成本。對於 Windows 下 TCP 服務端/客戶端開發者,深入學習其 IOCP 封裝藝術、緩存池/私有堆內存管理、PULL/PUSH 雙模型設計,極具架構參考價值。
- 上一篇文章: 二叉排序樹與平衡二叉樹:動態查找的樹形結構演進
- 下一篇文章: 哈希表(散列表)核心原理:散列函數構造與衝突解決全解析
Copyright ©
程式碼之家 All Rights Reserved