{"id":15039454,"url":"https://github.com/ldcsaa/hp-socket","last_synced_at":"2025-05-14T22:06:53.562Z","repository":{"id":12586472,"uuid":"15257213","full_name":"ldcsaa/HP-Socket","owner":"ldcsaa","description":"High Performance TCP/UDP/HTTP Communication Component","archived":false,"fork":false,"pushed_at":"2024-10-28T19:03:19.000Z","size":412504,"stargazers_count":5896,"open_issues_count":27,"forks_count":1785,"subscribers_count":516,"default_branch":"dev","last_synced_at":"2025-05-14T22:06:44.991Z","etag":null,"topics":["android","c","cpp","cross-platform","epoll","hpsocket","http","https","iocp","linux","ndk","netcore","network","networking","socket","ssl","tcp","udp","websocket","windows"],"latest_commit_sha":null,"homepage":"https://www.oschina.net/p/hp-socket","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ldcsaa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-12-17T14:53:52.000Z","updated_at":"2025-05-14T14:13:59.000Z","dependencies_parsed_at":"2023-02-16T09:01:14.101Z","dependency_job_id":"e93c837d-40e9-46d9-abbe-b6d7e3c92193","html_url":"https://github.com/ldcsaa/HP-Socket","commit_stats":{"total_commits":229,"total_committers":3,"mean_commits":76.33333333333333,"dds":0.4192139737991266,"last_synced_commit":"4a0ba66bf9b45aba70820a6fa6f6e598d4ce7078"},"previous_names":[],"tags_count":67,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ldcsaa%2FHP-Socket","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ldcsaa%2FHP-Socket/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ldcsaa%2FHP-Socket/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ldcsaa%2FHP-Socket/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ldcsaa","download_url":"https://codeload.github.com/ldcsaa/HP-Socket/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254235695,"owners_count":22036963,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","c","cpp","cross-platform","epoll","hpsocket","http","https","iocp","linux","ndk","netcore","network","networking","socket","ssl","tcp","udp","websocket","windows"],"created_at":"2024-09-24T20:42:53.911Z","updated_at":"2025-05-14T22:06:48.514Z","avatar_url":"https://github.com/ldcsaa.png","language":"C","readme":"![HP-Socket](Doc/HP-Socket%20Logo.png \"HP-Socket\")\n---\n*High Performance Network Framework*\n## Description\n- ***Server*** Based on IOCP/EPOLL communication model, combined with technology of memory pool, private heap etc., efficient memory management is implemented to support large scale and high concurrent communication scenarios.\n- ***Agent*** The Agent component is essentially a Multi-Client component that uses the same technical architecture as the Server component. An Agent component object can create and efficiently handle large-scale Socket connections at the same time.\n- ***Client*** Based on Event-Select/POLL communication model, each component object creates a communication thread and manages a Socket connection. Client components are suitable for small-scale client scenarios.\n## Document\n- HP-Socket Development Guide \n[[pdf]](Doc/HP-Socket%20Development%20Guide.pdf)\n- HP-Socket Class Diagram \n[[uml]](Doc/HP-Socket%20Class%20Diagram.uml)\n- HP-Socket Class Diagram \n[[jpg]](Doc/HP-Socket%20Class%20Diagram.jpg)\n- HP-Socket SSL Class Diagram \n[[jpg]](Doc/HP-Socket%20SSL%20Class%20Diagram.jpg)\n- HP-Socket HTTP Class Diagram \n[[jpg]](Doc/HP-Socket%20HTTP%20Class%20Diagram.jpg)\n## Workflow\n1. Create listener object\n2. Create component object (and binding with listener object)\n3. Start component object\n4. Connect to dest host (for *Agent* Component only)\n5. process network events (*OnConnect/OnReceive/OnClose* etc.)\n6. Stop component object (optional: component object will be stopped before destroy in step 7)\n7. Destroy component object\n8. Destroy listener object\n\n![Agent Workflow](Doc/HP-Socket-Agent-Demo.jpg \"Agent-Workflow\")\n## Example\n- ***C++ Example***\n\n``` C++\n#include \u003chpsocket/HPSocket.h\u003e\n\n/* Listener Class */\nclass CListenerImpl : public CTcpPullServerListener\n{\n\npublic:\n\t// 5. process network events\n\tvirtual EnHandleResult OnPrepareListen(ITcpServer* pSender, SOCKET soListen);\n\tvirtual EnHandleResult OnAccept(ITcpServer* pSender, CONNID dwConnID, UINT_PTR soClient);\n\tvirtual EnHandleResult OnHandShake(ITcpServer* pSender, CONNID dwConnID);\n\tvirtual EnHandleResult OnReceive(ITcpServer* pSender, CONNID dwConnID, int iLength);\n\tvirtual EnHandleResult OnSend(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength);\n\tvirtual EnHandleResult OnClose(ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode);\n\tvirtual EnHandleResult OnShutdown(ITcpServer* pSender);\n};\n\nint main(int argc, char* const argv[])\n{\n\t// 1. Create listener object\n\tCListenerImpl s_listener;\n\t// 2. Create component object (and binding with listener object)\n\tCTcpPullServerPtr s_pserver(\u0026s_listener);\n\t\n\t// 3. Start component object\n\tif(!s_pserver-\u003eStart(\"0.0.0.0\", 5555))\n\t\texit(1);\n\t\n\t/* wait for exit */\n\t// ... ... \n\t\n\t// 6. (optional) Stop component object\n\ts_pserver-\u003eStop();\n\n\treturn 0;\n\t\n\t// 7. Destroy component object automatically\n\t// 8. Destroy listener object automatically\n}\n```\n\n- ***C Example***\n\n``` C\n#include \u003chpsocket/HPSocket4C.h\u003e\n\n// 5. process network events\nEnHandleResult __HP_CALL OnConnect(HP_Agent pSender, HP_CONNID dwConnID);\nEnHandleResult __HP_CALL OnReceive(HP_Agent pSender, HP_CONNID dwConnID, int iLength);\nEnHandleResult __HP_CALL OnSend(HP_Agent pSender, HP_CONNID dwConnID, const BYTE* pData, int iLength);\nEnHandleResult __HP_CALL OnClose(HP_Agent pSender, HP_CONNID dwConnID, En_HP_SocketOperation enOperation, int iErrorCode);\nEnHandleResult __HP_CALL OnShutdown(HP_Agent pSender);\n\nint main(int argc, char* const argv[])\n{\n\tHP_TcpPullAgentListener s_listener;\n\tHP_TcpPullAgent s_agent;\n\n\t// 1. Create listener object\n\ts_listener = ::Create_HP_TcpPullAgentListener();\n\t// 2. Create component object (and binding with listener object)\n\ts_agent    = ::Create_HP_TcpPullAgent(s_listener);\n\t\n\t/* Set listener callbacks */\n\t::HP_Set_FN_Agent_OnConnect(s_listener, OnConnect);\n\t::HP_Set_FN_Agent_OnSend(s_listener, OnSend);\n\t::HP_Set_FN_Agent_OnPullReceive(s_listener, OnReceive);\n\t::HP_Set_FN_Agent_OnClose(s_listener, OnClose);\n\t::HP_Set_FN_Agent_OnShutdown(s_listener, OnShutdown);\n\t\n\t// 3. Start component object\n\tif(!::HP_Agent_Start(s_agent, \"0.0.0.0\", TRUE))\n\t\texit(1);\n\t\n\t// 4. Connect to dest host\n\t::HP_Agent_Connect(s_agent, REMOTE_HOST_1, REMOTE_PORT_1, nullptr);\n\t::HP_Agent_Connect(s_agent, REMOTE_HOST_2, REMOTE_PORT_2, nullptr);\n\t::HP_Agent_Connect(s_agent, REMOTE_HOST_3, REMOTE_PORT_3, nullptr);\n\t\n\t/* wait for exit */\n\t// ... ... \n\t\n\t// 6. (optional) Stop component object\n\t::HP_Agent_Stop(s_agent);\n\n\t// 7. Destroy component object\n\t::Destroy_HP_TcpPullAgent(s_agent);\n\t// 8. Destroy listener object\n\t::Destroy_HP_TcpPullAgentListener(s_listener);\n\t\n\treturn 0;\n}\n```\n\n## Component List\n- ***Basic Components***\n\n![Basic Component](Doc/Basic%20Component%20-%20mini.jpg \"Basic Component\")\n\n- ***SSL Components***\n\n![SSL Component](Doc/SSL%20Component%20-%20mini.jpg \"SSL Component\")\n\n- ***HTTP Components***\n\n![HTTP Component](Doc/HTTP%20Component%20-%20mini.jpg \"HTTP Component\")\n\n## Reference Projects\n\n- *[mimalloc](https://github.com/microsoft/mimalloc)*\n- *[jemalloc](https://github.com/jemalloc/jemalloc)*\n- *[openssl](https://github.com/openssl/openssl)*\n- *[llhttp](https://github.com/nodejs/llhttp)*\n- *[zlib](https://github.com/madler/zlib)*\n- *[brotli](https://github.com/google/brotli)*\n- *[kcp](https://github.com/skywind3000/kcp)*\n\n## Extension Projects\n\n- *[HP-Socket for MacOS](https://gitee.com/xin_chong/HP-Socket-for-macOS)*\n- *[HP-Socket for .Net](https://gitee.com/int2e/HPSocket.Net)*\n\n## Technical Exchange Groups\n\n- *[QQ Group - 1](https://jq.qq.com/?_wv=1027\u0026k=3UAbrhTG)*\n- *[QQ Group - 2](https://jq.qq.com/?_wv=1027\u0026k=uYBpc6bG)*","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fldcsaa%2Fhp-socket","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fldcsaa%2Fhp-socket","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fldcsaa%2Fhp-socket/lists"}