高性能网络框架
描述
- 基于IOCP/EPOLL通信模型的服务器,结合内存池技术,私人堆等,实现有效的内存管理,以支持大规模和高度并发通信方案。
- 代理代理组件本质上是使用与服务器组件相同的技术体系结构的多客户组件。代理组件对象可以同时创建并有效地处理大规模插座连接。
- 客户端基于事件选择/轮询通信模型,每个组件对象都会创建通信线程并管理套接字连接。客户组件适用于小规模的客户场景。
文档
- HP-socket开发指南[PDF]
- HP-Socket类图[UML]
- HP-socket类图[JPG]
- HP-Socket SSL类图[JPG]
- HP-Socket HTTP类图[JPG]
工作流程
- 创建侦听器对象
- 创建组件对象(并与侦听器对象绑定)
- 启动组件对象
- 连接到DEST主机(仅适用于代理组件)
- 过程网络事件( 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
// 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 ;
}组件列表
- 基本组件
- SSL组件
- HTTP组件
参考项目
- mimalloc
- Jemalloc
- Openssl
- llhttp
- Zlib
- Brotli
- KCP
扩展项目
- MACOS的HP-Socket
- .NET的HP-Socket
技术交换组
- QQ组-1
- QQ组-2
下载源码
通过命令行克隆项目:
git clone https://github.com/ldcsaa/HP-Socket.git