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

news2024/9/21 11:00:47

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1369800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小巧且兼具高性能的小模型 TinyLlama 等

TinyLlama-1.1B 小模型在边缘设备上有着广泛的应用,如智能手机、物联网设备和嵌入式系统,这些边缘设备通常具有有限的计算能力和存储空间,它们无法有效地运行大型语言模型。因此,深入探究小型模型显得尤为重要。 来自新加坡科技…

springboot虹软人脸识别集成

准备工作 虹软开放平台中创建一个新的应用 虹软开发平台【点我跳转】 开始上代码 基本配置 将下载的jar包放到src同级目录下 <!-- 虹软--><dependency><groupId>com.arcsoft.face</groupId><artifactId>arcsoft-sdk-face</artifactI…

【RH850U2A芯片】RAM and Flash介绍

目录 前言 正文 1.RH850-U2A16芯片RAM 1.1 用户使用RAM类型及大小 1.2 各类RAM起始地址 1.3 LRAM和CRAM的区别 1.4 RAM初始化问题 1.5 RAM使用经验 2.RH850-U2A16芯片Flash 2.1 Flash类型及大小 2.2 各类Flash的起始地址 2.3 Code Flash和Data Flash的区别 2.4 Fl…

谷粒商城项目|微服务架构的一些与思考解决跨域问题

1.微服务架构的组成每部分的作用 2.还有其他的微服务架构模式吗 3.微服务服务交互的方式 1&#xff09;grpc 2&#xff09;rest api 4.微服务网关与API网关&#xff1f; 5.注册中心比较&#xff08;Nacos与Eureka&#xff09; Nacos Nacos 是阿里巴巴开源的项目&#xff0c;N…

Vue2.v-指令

v-if 在双引号中写判断条件。 <div v-if"score>90">A</div> <div v-else-if"score>80">B</div> <div v-else>C</div>v-on: :冒号后面跟着事件。 为了简化&#xff0c;可以直接用代替v-on:。 事件名“内联语…

Nessus漏洞扫描工具安装、使用技巧及注意事项

Nessus是一款功能强大的安全评估工具&#xff0c;它可以帮助安全团队快速发现网络中潜在的安全风险和漏洞&#xff0c;并对其进行评估和修复。对于渗透测试人员来说&#xff0c;Nessus更是必不可少的工具之一。 1. Nessus安装 获取安装包&#xff0c;官网地址&#xff1a;http…

【数据库】MySQL锁

一、锁的基本概念 1、锁的定义 锁是协调多个进程或线程并发访问数据库资源的一种机制。 MySQL中的锁是在服务器层或者存储引擎层实现的&#xff0c;保证了数据访问的一致性与有效性。但加锁是消耗资源的&#xff0c;锁的各种操作&#xff0c;包括获得锁、检测锁是否已解除、…

26 数字验证

效果演示 实现了一个简单的数字密码输入表单&#xff0c;用户需要输入一个4位数字密码来验证身份。表单包含一个标题、描述、输入字段、两个按钮和一个关闭按钮。输入字段是一个4位数字密码&#xff0c;用户需要在每个输入框中输入数字来输入密码。两个按钮分别是“验证”和“清…

简单的MOV转MP4方法

1.下载腾讯的QQ影音播放器, 此播放器为绿色视频播放器, 除了播放下载好的视频外没有臃肿无用功能 官网 QQ影音 百度网盘链接&#xff1a;https://pan.baidu.com/s/1G0kSC-844FtRfqGnIoMALA 提取码&#xff1a;dh4w 2.用QQ影音打开MOV文件 3.右下角打开影音工具箱 , 选择截取…

【Java并发】聊聊concurrentHashMap的put核心流程

结构介绍 1.8中concurrentHashMap采用数组链表红黑树的方式存储&#xff0c;并且采用CASSYN的方式。在1.7中主要采用的是数组链表&#xff0c;segment分段锁reentrantlock。本篇主要在1.8基础上介绍下. 那么&#xff0c;我们的主要重点是分析什么呢&#xff0c;其实主要就是p…

强化学习在生成式预训练语言模型中的研究现状简单调研

1. 绪论 本文旨在深入探讨强化学习在生成式预训练语言模型中的应用&#xff0c;特别是在对齐优化、提示词优化和经验记忆增强提示词等方面的具体实践。通过对现有研究的综述&#xff0c;我们将揭示强化学习在提高生成式语言模型性能和人类对话交互的关键作用。虽然这些应用展示…

kubernetes volume 数据存储详解

写在前面&#xff1a;如有问题&#xff0c;以你为准&#xff0c; 目前24年应届生&#xff0c;各位大佬轻喷&#xff0c;部分资料与图片来自网络 内容较长&#xff0c;页面右上角目录方便跳转 概述 容器的生命周期可能很短&#xff0c;会被频繁的创建和销毁 保存在容器中的…

Leetcode刷题笔记题解(C++):无重复字符的最长子串

思路&#xff1a; 利用滑动窗口的思想&#xff0c;用起始位置startindex和curlength来记录这个滑动窗口的大小&#xff0c;并且得出最长距离&#xff1b;利用哈希表来判断在滑动窗口中是否存在重复字符&#xff0c;代码如下所示&#xff1a; class Solution { public:int len…

6.1 截图工具HyperSnap6简介

图片是组成多媒体作品的基本元素之一&#xff0c;利用图片可以增强多媒体作品的亲和力和说说服力。截取图片最简单的方法是直接按下键盘上的“PrintScreen”键截取整个屏幕或按下“AltPrintScreen”组合键截取当前活动窗口&#xff0c;然后在画笔或者其它的图片处理软件中进行剪…

基于SSM的在线电影票购买系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的在线电影票购买系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring…

【模拟IC学习笔记】Cascode OTA 设计

辅助定理 增益Gm*输出阻抗 输出短路求Gm 输入置0求输出阻抗 求源极负反馈的增益 随着Vin的增加&#xff0c;Id也在增加&#xff0c;Rs上压降增加&#xff0c;所以&#xff0c;Vin的一部分电压体现在Rs上&#xff0c;而不是全部作为Vgs&#xff0c;因此导致Id变得平滑。 Rs足…

软件测试|MySQL DISTINCT关键字过滤重复数据

简介 在MySQL中&#xff0c;有时候我们需要从表中检索唯一的、不重复的数据。这时&#xff0c;我们可以使用DISTINCT关键字来过滤掉重复的数据行。在本文中&#xff0c;我们将深入探讨MySQL中DISTINCT的用法以及如何在查询中使用它来得到不重复的结果集。 基本语法 DISTINCT…

Influxdb2修改管理员密码

通过恢复管理员令牌来重置InfluxDB2管理员的密码 1.找到数据库的配置文件 一般为config.json 2.配置文件的的blod文件配置 3.在这个混合文本和二进制json文件中搜索已知的用户名或token之类的字符串。 例如&#xff1a; "id":"0bd73badf2941000","…

系列十四、理解MySQL varchar(50)

一、理解MySQL varchar(50) 1.1、概述 日常开发中&#xff0c;数据库建表是必不可少的一个环节&#xff0c;建表的时候通常会看到设定某个字段的长度为varchar(50)&#xff0c;例如如下建表语句&#xff1a; 那么怎么理解varchar(50)&#xff1f;这个分情况的&#xff0c;MySQ…

美创科技葛宏彬:夯实安全基础,对医疗数据风险“逐个击破”

导读 解决医疗机构“临床业务数据合规流动”与“重要数据安全防护”两大难题。 2023年11月11日&#xff0c;在2023年南湖HIT论坛上&#xff0c;HIT专家网联合杭州美创科技股份有限公司&#xff08;以下简称美创科技&#xff09;发布《医疗数据安全风险分析及防范实践》白皮书…