HP Socket

2025-12-07 0 465

高性能网络框架

描述

  • 基于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
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

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

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