HP-Socket是一套通用的高性能TCP/UDP/HTTP 通信框架,包含服務端組件、客戶端組件和Agent組件,廣泛適用於各種不同套用場景的TCP/UDP/HTTP通信系統,提供C/C++、C#、Delphi、E(易語言)、Java、Python等程式語言接口。HP-Socket對通信層完全封裝,應用程式不必關注通信層的任何細節;HP-Socket提供基於事件通知模型的API接口,能非常簡單高效地整合到新舊應用程式中。
為了讓使用者能方便快速地學習和使用HP-Socket,迅速掌握框架的設計思想和使用方法,特此精心製作了大量Demo示例(如:PUSH模型示例、PULL模型示例、PACK模型示例、性能測試示例以及其它程式語言示例)。HP-Socket當前支持Windows和Linux平台。
基本介紹
- 中文名:HP-Socket
- 外文名:HP-Socket
- 開發組織:JessMA Open Source
- 性質:高性能網路通信框架
- 適用:Windows/Linux
通用性,易用性,高性能,伸縮性,工作流程,示例代碼,C++ 示例,C 示例,組件列表,基礎組件,SSL組件,HTTP組件,更新歷史,
通用性
- HP-Socket的職責就是接收和傳送位元組流,不參與應用程式的協定解析等工作。
- HP-Socket與應用程式通過接口進行互動,並完全解耦。任何套用只要實現了HP-Socket的接口規範都可以無縫整合HP-Socket。
易用性
- 易用性對所有通用框架都是至關重要的,如果太難用還不如自己從頭寫一個來得方便。因此,HP-Socket的接口設計得非常簡單和統一。
- HP-Socket完全封裝了所有底層通信細節,應用程式不必也不能幹預底層通信操作。通信連線被抽象為Connection ID,Connection ID作為連線的標識提供給應用程式來處理不同的連線。
- HP-Socket提供PUSH / PULL / PACK等接收模型,應用程式可以靈活選擇以手工方式、半自動方式或全自動方式處理封解包,PULL / PACK接收模型在降低封解包處理複雜度的同時能大大減少出錯幾率。
高性能
HP-Socket 作為底層的通用框架,性能是關鍵指標,絕對不能成為系統的瓶頸。HP-Socket 在設計上充分考慮性能、使用場景、複雜性和易用性等因素,作出以下幾點設計決策:
- Server 組件:基於IOCP / EPOLL通信模型,並結合快取池、私有堆等技術實現高效記憶體管理,支持超大規模、高並發通信場景。
- Agent 組件:Agent組件實質上是Multi-Client組件,與Server組件採用相同的技術架構。一個Agent組件對象可同時建立和高效處理大規模Socket連線。
- Client 組件:基於Event Select / POLL通信模型,每個組件對象創建一個通信執行緒並管理一個Socket連線,適用於小規模客戶端場景。
伸縮性
應用程式可以根據不同的容量要求、通信規模和資源狀況等現實場景調整HP-Socket的各項性能參數(如:工作執行緒的數量、快取池的大小、傳送模式和接收模式等),最佳化資源配置,在滿足套用需求的同時不必過度浪費資源。
工作流程
- 創建監聽器對象
- 創建組件對象(並綁定監聽器)
- 啟動組件
- 連線遠程主機(僅用於Agent組件)
- 處理通信事件(OnConnect/OnReceive/OnClose ......)
- 停止組件(可選,第7步銷毀組件對象前會先停止組件)
- 銷毀組件對象
- 銷毀監聽器對象
示例代碼
C++ 示例
#include <hpsocket/HPSocket.h>/* Listener Class */class CListenerImpl : public CTcpPullServerListener{public: // 5. process network events virtual EnHandleResult OnPrepareListen(ITcpServer* pSender, SOCKET soListen); virtual EnHandleResult OnAccept(ITcpServer* pSender, CONNID dwConnID, UINT_PTR soClient); virtual EnHandleResult OnHandShake(ITcpServer* pSender, CONNID dwConnID); virtual EnHandleResult OnReceive(ITcpServer* pSender, CONNID dwConnID, int iLength); virtual EnHandleResult OnSend(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength); virtual EnHandleResult OnClose(ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode); virtual EnHandleResult OnShutdown(ITcpServer* pSender);};int main(int argc, char* const argv[]){ // 1. Create listener object CListenerImpl s_listener; // 2. Create component object (and binding with listener object) CTcpPullServerPtr s_pserver(&s_listener); // 3. Start component object if(!s_pserver->Start("0.0.0.0", 5555)) exit(1); /* wait for exit */ // ... ... // 6. (optional) Stop component object s_pserver->Stop() return 0; // 7. Destroy component object automatically // 8. Destroy listener object automatically}
C 示例
#include <hpsocket/HPSocket4C.h>// 5. process network eventsEnHandleResult __HP_CALL OnConnect(HP_Agent pSender, HP_CONNID dwConnID);EnHandleResult __HP_CALL OnReceive(HP_Agent pSender, HP_CONNID dwConnID, int iLength);EnHandleResult __HP_CALL OnSend(HP_Agent pSender, HP_CONNID dwConnID, const BYTE* pData, int iLength);EnHandleResult __HP_CALL OnClose(HP_Agent pSender, HP_CONNID dwConnID, En_HP_SocketOperation enOperation, int iErrorCode);EnHandleResult __HP_CALL OnShutdown(HP_Agent pSender);int main(int argc, char* const argv[]){ HP_TcpPullAgentListener s_listener; HP_TcpPullAgent s_agent; // 1. Create listener object s_listener = ::Create_HP_TcpPullAgentListener(); // 2. Create component object (and binding with listener object) s_agent = ::Create_HP_TcpPullAgent(s_listener); /* Set listener callbacks */ ::HP_Set_FN_Agent_OnConnect(s_listener, OnConnect); ::HP_Set_FN_Agent_OnSend(s_listener, OnSend); ::HP_Set_FN_Agent_OnPullReceive(s_listener, OnReceive); ::HP_Set_FN_Agent_OnClose(s_listener, OnClose); ::HP_Set_FN_Agent_OnShutdown(s_listener, OnShutdown); // 3. Start component object if(::HP_Agent_HasStarted(s_agent)) exit(1); // 4. Connect to dest host ::HP_Agent_Connect(s_agent, "remote.host.1", REMOTE_PORT_1, nullptr); ::HP_Agent_Connect(s_agent, "remote.host.2", REMOTE_PORT_2, nullptr); ::HP_Agent_Connect(s_agent, "remote.host.3", REMOTE_PORT_3, nullptr); /* wait for exit */ // ... ... // 6. (optional) Stop component object ::HP_Agent_Stop(s_agent) // 7. Destroy component object ::Destroy_HP_TcpPullAgent(s_agent); // 8. Destroy listener object ::Destroy_HP_TcpPullAgentListener(s_listener); return 0;}
組件列表
基礎組件
SSL組件
HTTP組件
更新歷史
- 2019/07/03 發布 v5.5.3 更新
- 2019/05/27 發布 v5.5.2 更新
- 2019/04/22 發布 v5.5.1 更新
- 2019/03/04 發布 v5.4.4 更新
- 2018/12/07 發布 v5.4.3 更新
- 2018/11/05 發布 v5.4.2 更新
- 2018/09/05 發布 v5.4.1 更新
- 2018/06/25 發布 v5.3.2 更新
- 2018/05/03 發布 v5.3.1 更新
- 2018/02/01 發布 v5.2.1 更新
- 2017/12/14 發布 v5.1.1 更新
- 2017/04/28 發布 v5.0.1 更新
- 2016/11/30 發布 v4.1.1 更新
- 2016/10/15 發布 v4.0.1 更新
- 2016/08/12 發布 v3.5.4 更新
- 2016/07/18 發布 v3.5.3 更新
- 2016/06/07 發布 v3.5.2 更新
- 2016/05/24 發布 v3.5.1 更新
- 2016/04/22 發布 v3.4.4 更新
- 2016/04/09 發布 v3.4.3 更新
- 2016/03/27 發布 v3.4.2 更新
- 2016/03/27 發布 v3.4.1 更新
- 2015/12/01 發布 v3.3.2 更新
- 2015/01/25 發布 v3.3.1 更新
- 2014/08/13 發布 v3.2.3 更新
- 2014/07/07 發布 v3.2.2 更新
- 2014/06/05 發布 v3.2.1 更新
- 2014/03/29 發布 v3.1.3 更新
- 2014/01/08 發布 v3.1.2 更新
- 2013/12/25 發布 v3.1.1 更新
- 2013/11/26 發布 v3.0.2 更新
- 2013/10/26 發布 v3.0.1 更新
- 2013/08/24 發布 v2.2.3 更新
- 2013/07/11 發布 v2.2.2 更新
- 2013/06/13 發布 v2.2.1 更新
- 2013/04/21 發布 v2.1.1 更新
- 2013/03/23 發布 v2.0.1 更新
- 2012/11/3 發布 v1.0.1