# HP-Socket **Repository Path**: zmyer/HP-Socket ## Basic Information - **Project Name**: HP-Socket - **Description**: High Performance TCP/UDP Socket Component - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 638 - **Created**: 2018-02-01 - **Last Updated**: 2024-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HP-Socket 高性能网络通信框架(跨 Linux、Windows 版) [English Doc](https://gitee.com/ldcsaa/HP-Socket)、[中文文档](https://gitee.com/ldcsaa/HP-Socket/blob/master/README_ZH.md) ## Description - Server 组件:基于 IOCP / EPOLL 通信模型,并结合缓存池、私有堆等技术实现高 效内存管理,支持超大规模、高并发通信场景。 - Agent 组件:Agent 组件实质上是 Multi-Client 组件,与 Server 组件采用相同的技 术架构。一个 Agent 组件对象可同时建立和高效处理大规模 Socket 连接。 - Client 组件:基于 Event Select / POLL 通信模型,每个组件对象创建一个通信线程 并管理一个 Socket 连接,适用于小规模客户端场景。 ## 文档 - HP-Socket Development Guide.pdf: [download](https://gitee.com/ldcsaa/HP-Socket/blob/master/Doc) - 概 述 - 整体架构 - 组件分类 - 组件接口 - 监听器接口 - 框架详述 - 关键概念 - 接收模型 - 发送策略 - 接收策略 - 连接方式 - 连接绑定 - Server 组件 - 接口描述 - 工作流程 - Agent 组件 - 接口描述 - 工作流程 - Client 组件 - 接口描述 - 工作流程 - SSL - 组件接口 - SSL 运行环境 - HTTP - 组件接口 - HTTP 监听器事件 - Cookie 管理 - Linux - 组件概述 - 安装使用 - 使用方式 - 源代码 - 静态库 - HPSocket DLL - HPSocket4C DLL - 其它编程语言使用 HPSocket - 附 录 - 示例 Demo - Windows 示例 - Linux 示例 - 辅助函数 - FAQ ## Agent 组件 ![Agent 组件](https://gitee.com/uploads/images/2017/1213/120601_c0d950fb_81720.jpeg "HP-Socket-Agent-Demo.JPG") ## 例子 - ***C++ 例子*** ``` C++ #include /* 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 例子*** ``` C #include // 5. process network events EnHandleResult __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; } ``` ## Component List - ***Basic Components*** ![Basic Component](https://gitee.com/uploads/images/2017/1214/143803_15f6abc9_81720.jpeg "Basic Component- mini.jpg") - ***SSL Components*** ![SSL Component](https://gitee.com/uploads/images/2017/1214/143622_d6c1f436_81720.jpeg "SSL Component - mini.jpg") - ***HTTP Components*** ![HTTP COmponent](https://gitee.com/uploads/images/2017/1214/143640_0eb6f9e4_81720.jpeg "HTTP Component - mini.jpg")