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

本文详细介绍了HP-Socket架构中的接口分类、服务器端与客户端流程交互、代理机制、UDP节点与UDPARQ的特性,以及接收和发送策略,包括PUSH、PULL、PACK模型和SSL、HTTP等相关支持。
摘要由CSDN通过智能技术生成

1、接口

1.1 接口模型

在这里插入图片描述

1.2 三类接口

HP-Socket 定义了三类接口

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

2、流程交互

2.1 服务器端 Server

在这里插入图片描述

2.2 客户端 Client

在这里插入图片描述

2.3 代理 Agent

Agent 组件本质上是 Client 组件,一个 Agent 对象能同时管理多个客户端连接
在这里插入图片描述

2.4 UDP 节点(普通UDP Socket)

在这里插入图片描述

2.5 UDP ARQ(可靠 UDP)

UDP ARQ:自动重传请求 UDP、可靠 UDP
在这里插入图片描述

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、线程池、数据压缩与解压

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭老二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值