ldcsaa/HP-Socket

GitHub: ldcsaa/HP-Socket

Stars: 6160 | Forks: 1795

## ![HP-Socket](Doc/HP-Socket%20Logo.png "HP-Socket") *高性能网络通信框架* ## 描述 - ***Server*** 基于 IOCP/EPOLL 通信模型,结合内存池、私有堆等技术,实现了高效的内存管理,以支持大规模和高并发的通信场景。 - ***Agent*** Agent 组件本质上是一个多客户端组件,采用与 Server 组件相同的技术架构。一个 Agent 组件对象可以同时创建并高效处理大规模的 Socket 连接。 - ***Client*** 基于 Event-Select/POLL 通信模型,每个组件对象创建一个通信线程并管理一个 Socket 连接。Client 组件适用于小规模的客户端场景。 ## 文档 - HP-Socket 开发指南 [[pdf]](Doc/HP-Socket%20Development%20Guide.pdf) - HP-Socket 类图 [[uml]](Doc/HP-Socket%20Class%20Diagram.uml) - HP-Socket 类图 [[jpg]](Doc/HP-Socket%20Class%20Diagram.jpg) - HP-Socket SSL 类图 [[jpg]](Doc/HP-Socket%20SSL%20Class%20Diagram.jpg) - HP-Socket HTTP 类图 [[jpg]](Doc/HP-Socket%20HTTP%20Class%20Diagram.jpg) ## 工作流程 1. 创建监听器对象 2. 创建组件对象(并与监听器对象绑定) 3. 启动组件对象 4. 连接目标主机(仅针对 *Agent* 组件) 5. 处理网络事件(*OnConnect/OnReceive/OnClose* 等) 6. 停止组件对象(可选:组件对象会在第 7 步销毁前自动停止) 7. 销毁组件对象 8. 销毁监听器对象 ![Agent Workflow](Doc/HP-Socket-Agent-Demo.jpg "Agent-Workflow") ## 示例 - ***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 示例*** ``` #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_Start(s_agent, "0.0.0.0", TRUE)) 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; } ``` ## 组件列表 - ***基础组件*** ![Basic Component](Doc/Basic%20Component%20-%20mini.jpg "Basic Component") - ***SSL 组件*** ![SSL Component](Doc/SSL%20Component%20-%20mini.jpg "SSL Component") - ***HTTP 组件*** ![HTTP Component](Doc/HTTP%20Component%20-%20mini.jpg "HTTP Component") ## 参考项目 - *[mimalloc](https://github.com/microsoft/mimalloc)* - *[jemalloc](https://github.com/jemalloc/jemalloc)* - *[openssl](https://github.com/openssl/openssl)* - *[llhttp](https://github.com/nodejs/llhttp)* - *[zlib](https://github.com/madler/zlib)* - *[brotli](https://github.com/google/brotli)* - *[kcp](https://github.com/skywind3000/kcp)* ## 扩展项目 - *[HP-Socket for MacOS](https://gitee.com/xin_chong/HP-Socket-for-macOS)* - *[HP-Socket for .Net](https://gitee.com/int2e/HPSocket.Net)* ## 技术交流群 - *[QQ 群 - 1](https://jq.qq.com/?_wv=1027&k=3UAbrhTG)* - *[QQ 群 - 2](https://jq.qq.com/?_wv=1027&k=uYBpc6bG)*
标签:Agent组件, C++, Docker‑Compose, EPOLL, HP-Socket, IOCP, IP 地址批量处理, Socket编程, SSL/TLS, TCP/IP, UDP, 事件驱动, 内存池, 安全测试工具, 客户端加密, 客户端开发, 带宽管理, 异步通信, 数据擦除, 服务端开发, 用户界面自定义, 私有堆, 网络库, 网络框架, 通信组件, 高并发, 高性能网络通信