【C++】HP-Socket(二):框架介绍、功能说明
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()方法发送数据时,组件内部会把数据缓存起来,在适当的时机再发送出去。
对于 IServer 和 IAgent 系列组件,当应用程序调用组件的 Send()、SendPackets()、SendSmallFile() 方法发送数据时,根据不同的发送策略会有不同的处理方式。
发送策略通过 SetSendPolicy(enSendPolicy) 方法进行设置,共有三种策略
- SP_PACK :打包策略(默认),尽量把多个发送操作的数据组合在一起发送,增加传输效率。
- SP_SAFE :安全策略,尽量把多个发送操作的数据组合在一起发送,并尽量避免缓冲区溢出。
- SP_DIRECT :直接策略,对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合。
注意:Linux 平台的通信组件不支持发送策略设置,所有 Linux 通信组件的发送策略均为SP_PACK
4、其它特征
全面支持SSL、HTTP、Cookie、线程池、数据压缩与解压
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!