HP Socket

2025-12-07 0 429

高性能网络框架

描述

  • 基于IOCP/EPOLL通信模型服务器,结合内存池技术,私人堆等,实现有效的内存管理,以支持大规模和高度并发通信方案。
  • 代理代理组件本质上是使用与服务器组件相同的技术体系结构的多客户组件。代理组件对象可以同时创建并有效地处理大规模插座连接。
  • 客户端基于事件选择/轮询通信模型,每个组件对象都会创建通信线程并管理套接字连接。客户组件适用于小规模的客户场景。

文档

  • HP-socket开发指南[PDF]
  • HP-Socket类图[UML]
  • HP-socket类图[JPG]
  • HP-Socket SSL类图[JPG]
  • HP-Socket HTTP类图[JPG]

工作流程

  1. 创建侦听器对象
  2. 创建组件对象(并与侦听器对象绑定)
  3. 启动组件对象
  4. 连接到DEST主机(仅适用于代理组件)
  5. 过程网络事件( OnConnect/OnReceive/Onclose等)
  6. 停止组件对象(可选:组件对象将在第7步中销毁之前停止)
  7. 销毁组件对象
  8. 销毁听众对象

例子

  • 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 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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

左子网 开发教程 HP Socket https://www.zuozi.net/31731.html

BiliBiliToolPro
上一篇: BiliBiliToolPro
WeiXinMPSDK
下一篇: WeiXinMPSDK
常见问题

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务