HP-Socket 定义了三类接口
Agent 组件本质上是 Client 组件,一个 Agent 对象能同时管理多个客户端连接
UDP ARQ:自动重传请求 UDP、可靠 UDP
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() 分别设置包头标识与最大包长限制。
对于 IClient 系列组件,当应用程序调用组件的 Send()、SendPackets()、SendSmallFile()方法发送数据时,组件内部会把数据缓存起来,在适当的时机再发送出去。
对于 IServer 和 IAgent 系列组件,当应用程序调用组件的 Send()、SendPackets()、SendSmallFile() 方法发送数据时,根据不同的发送策略会有不同的处理方式。
发送策略通过 SetSendPolicy(enSendPolicy) 方法进行设置,共有三种策略
注意:Linux 平台的通信组件不支持发送策略设置,所有 Linux 通信组件的发送策略均为SP_PACK
全面支持SSL、HTTP、Cookie、线程池、数据压缩与解压