HP-Socket

HP-Socket

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的各項性能參數(如:工作執行緒的數量、快取池的大小、傳送模式和接收模式等),最佳化資源配置,在滿足套用需求的同時不必過度浪費資源。

工作流程

  1. 創建監聽器對象
  2. 創建組件對象(並綁定監聽器)
  3. 啟動組件
  4. 連線遠程主機(僅用於Agent組件)
  5. 處理通信事件(OnConnect/OnReceive/OnClose ......)
  6. 停止組件(可選,第7步銷毀組件對象前會先停止組件)
  7. 銷毀組件對象
  8. 銷毀監聽器對象
HP-Socket Agent 組件工作流程HP-Socket Agent 組件工作流程

示例代碼

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組件

SSL組件SSL組件

HTTP組件

HTTP組件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

相關詞條

熱門詞條

聯絡我們