【C++】HP-Socket(二):框架介绍、功能说明

1、接口

1.1 接口模型

【C++】HP-Socket(二):框架介绍、功能说明_第1张图片

1.2 三类接口

HP-Socket 定义了三类接口

  • 组件接口(如:ITcpServer / IUdpClient):声明组件操作方法,应用程序创建组件对象后通过该接口来使用组件
  • 组件实现类(如:CTcpServer / CUdpClient):实现组件接口,执行实际通信处理工作,并向监听器报告通信事件
  • 监听器接口(如:ITcpServerListener / IUdpClientListener):声明组件的通信事件回调方法

2、流程交互

2.1 服务器端 Server

【C++】HP-Socket(二):框架介绍、功能说明_第2张图片

2.2 客户端 Client

【C++】HP-Socket(二):框架介绍、功能说明_第3张图片

2.3 代理 Agent

Agent 组件本质上是 Client 组件,一个 Agent 对象能同时管理多个客户端连接
【C++】HP-Socket(二):框架介绍、功能说明_第4张图片

2.4 UDP 节点(普通UDP Socket)

【C++】HP-Socket(二):框架介绍、功能说明_第5张图片

2.5 UDP ARQ(可靠 UDP)

UDP ARQ:自动重传请求 UDP、可靠 UDP
【C++】HP-Socket(二):框架介绍、功能说明_第6张图片

3、接收、发送策略

3.1 三种接收模型

1)PUSH 模型:组件接收到数据时会触发监听器对象的 OnReceive(pSender, dwConnID, pData, iLength) 事件,把数据“”给应用程序。

PUSH 模型组件触发监听器对象的 OnReceive(pSender, dwConnID, pData, iLength)事件时,应用程序需要立即处理接收到的数据,如:粘包处理、协议解析等。组件不会对应用层的数据处理工作提供任何协助

2)PULL 模型:组件接收到数据时会触发监听器对象的 OnReceive(pSender, dwConnID, iTotalLength) 事件,告诉应用程序当前已经接收到多少数据,应用程序检查数据的长度,如果满足需要则调用组件的 Fetch(dwConnID, pData, iDataLength) 方法把需要的数据“”出来。

PULL 模型组件触发监听器对象的 OnReceive(pSender, dwConnID, iTotalLength) 事 件时,应用程序根据应用层协议检测接收到的数据长度(iTotalLength)是否满足处理条件,选择性地进行处理。当 iTotalLength 小于当前期望的长度时可以忽略本次
事 件 ; 当 iTotalLength 大于或等于当前期望的长度时,循环调用组件的Fetch(dwConnID, pData, iDataLength) 方法把需要的数据拉取出来,直到剩余的数据长度小于当前期望的长度。

3)PACK 模型:PACK 模型系列组件是 PUSH 和 PULL 模型的结合体,应用程序不必处理分包(如:PUSH)与数据抓取(如:PULL),组件保证每个 OnReceive 事件都向应用程序提供一个完整数据包

PACK 模型组件触发监听器对象的 OnReceive(pSender, dwConnID, pData, iLength)事件时,会保证 pData 是一个完整的数据包。PACK 模型组件会对应用程序发送的每个数据包自动加上 4 字节(32 位)的包头,组件接收到数据时根据包头信息自动分包,每个完整数据包通过 OnReceive 事件发送给应用程序。

PACK 包头格式:
XXXXXXXXXX YYYYYYYYYYYYYYYYYYYYYY
前 10 位 X 为包头标识位,用于数据包校验。有效包头标识取值范围 0 ~ 1023(0x3FF),当包头标识等于 0 时不校验包头。后 22 位 Y 为长度位,记录包体长度。有效数据包最大长度不能超过 4194303(0x3FFFFF)字节,默认长度限制为:2621440x40000)字节。应 用程序可以通过 SetPackHeaderFlag() 和 SetMaxPackSize() 分别设置包头标识与最大包长限制。

3.2 发送策略

对于 IClient 系列组件,当应用程序调用组件的 Send()、SendPackets()、SendSmallFile()方法发送数据时,组件内部会把数据缓存起来,在适当的时机再发送出去。

对于 IServerIAgent 系列组件,当应用程序调用组件的 Send()、SendPackets()、SendSmallFile() 方法发送数据时,根据不同的发送策略会有不同的处理方式。

发送策略通过 SetSendPolicy(enSendPolicy) 方法进行设置,共有三种策略

  • SP_PACK :打包策略(默认),尽量把多个发送操作的数据组合在一起发送,增加传输效率。
  • SP_SAFE :安全策略,尽量把多个发送操作的数据组合在一起发送,并尽量避免缓冲区溢出。
  • SP_DIRECT :直接策略,对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合。

注意:Linux 平台的通信组件不支持发送策略设置,所有 Linux 通信组件的发送策略均为SP_PACK

4、其它特征

全面支持SSL、HTTP、Cookie、线程池、数据压缩与解压

你可能感兴趣的:(C++,c++,HP-Socket)