【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()方法发送数据时,组件内部会把数据缓存起来,在适当的时机再发送出去。

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

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

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

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

4、其它特征

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

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

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

相关文章

Python基础(二):数值类型及其运算

目录 前言1 数值类型2 基本运算3 数学函数4 随机函数 前言 Hello,我是 Python 数据类型数字,大家之前对我可能已经有所耳闻,俗话说闻名不如见面,见面要先自我介绍,为了让大家对我有一个清晰的了解,下面我要…

Mac 安装Nginx教程

Nginx官网 Nginx官网英文 1.在终端输入brew search nginx 命令检查nginx是否安装了 2. 安装命令:brew install nginx 3. 查看Nginx信息命令brew info nginx 4. 启动 nginx方式:在终端里输入 nginx 5.查看 nginx 是否启动成功 在浏览器中访问http://l…

powerdesigner导出sql将name放到comment注释上

1. 批量设置 2. 脚本 Option Explicit ValidationMode True InteractiveMode im_Batch Dim mdl the current modelget the current active model Set mdl ActiveModel If (mdl Is Nothing) ThenMsgBox"There is no current Model " ElseIf Not mdl.IsKindOf(PdPD…

JSON数据处理

1.添加json依赖 springmvc 默认使用jackson作为json类库,不需要修改applicationContext-servlet.xml任何配置&#xff0c;只需引入以下类库springmvc就可以处理json数据&#xff1a; <!--spring-json依赖--> <dependency><groupId>com.fasterxml.jackson.c…

构建自己的私人GPT-支持中文

上一篇已经讲解了如何构建自己的私人GPT&#xff0c;这一篇主要讲如何让GPT支持中文。 privateGPT 本地部署目前只支持基于llama.cpp 的 gguf格式模型&#xff0c;GGUF 是 llama.cpp 团队于 2023 年 8 月 21 日推出的一种新格式。它是 GGML 的替代品&#xff0c;llama.cpp 不再…

【cmu15445c++入门】(2)c++中的std::move() 左值引用右值引用

左值右值 要理解move语义&#xff0c;必须理解左值和右值的概念。左值的简化定义是左值是对象&#xff0c;指向内存中某个位置。右值是左值之外的任何。 std::move() move语义&#xff0c;在C中是一个有用的方法&#xff0c;它允许在对象之间高效和优化地转移数据所有权。m…

SpringMVC SpringMVC概述

1.1.MVC介绍 MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#xff1a;专门存储业务数…

vue3 useAttrs的使用场景,提取共有props

1 场景 多个类似组件都需要传参data&#xff0c;用于请求接口或者处理数据&#xff0c;想让组件干净整洁&#xff0c;把参数data提出来 2 方法 选项式 可以使用mixin混入或者extends继承&#xff08;略&#xff09; 组合式 可以使用hook 无脑式踩坑&#xff08;如下代码…

LabVIEW在设备状态监测与故障诊断中的应用

在现代工业自动化领域&#xff0c;LabVIEW的系统设计平台在设备状态监测与故障诊断中扮演着举足轻重的角色。通过提供一个可视化和数据流编程语言&#xff0c;LabVIEW大大提升了设备安全监测的效率&#xff0c;减少了系统维护成本&#xff0c;同时增强了设备的可靠性和可维护性…

Verilog 高级教程笔记——持续更新中

Verilog advanced tutorial 转换函数 调用系统任务任务描述int_val $rtoi( real_val ) ;实数 real_val 转换为整数 int_val 例如 3.14 -> 3real_val $itor( int_val ) ;整数 int_vla 转换为实数 real_val 例如 3 -> 3.0vec_val $realtobits( real_val ) ;实数转换为…

Yolov5水果分类识别+pyqt交互式界面(附代码)

本文介绍了基于Yolov5模型的水果分类识别系统以及使用PyQt库构建的交互式界面。 首先&#xff0c;Yolov5是一种目标检测算法&#xff0c;它可以通过输入图片&#xff0c;自动识别出其中包含的不同目标&#xff0c;并标注出它们的位置和类别。我们利用Yolov5模型对水果图片进行…

【算法Hot100系列】有效的数独

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

6款实用的Git可视化管理工具

前言 俗话说得好“工欲善其事&#xff0c;必先利其器”&#xff0c;合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。我们在团队开发中统一某个开发工具能够降低沟通成本&#xff0c;提高协作效率。今天给大家分享6款实用的Git可视化管理工具。 Git是什么&…

KMS地址

https://www.coolhub.top/tech-articles/kms_list.html

ELK企业级日志系统分析系统

目录 一、什么是ELK&#xff1f; 二、ELK三大组件 三、ELK的工作原理 四、完整日志系统基本特征 一、什么是ELK&#xff1f; ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用…

01-连接池项目背景:C++的数据库操作

从0开始学习C与数据库的联动 1.原始方式-使用MySQL Connector/C 提供的API查询 1.1 数据库预操作 我的本地电脑上有mysql数据库&#xff0c;里面预先创建了一个database名叫chat&#xff0c;用户名root&#xff0c;密码password。 1.2 Visual Studio预操作 在Windows上使用…

openGauss学习笔记-189 openGauss 数据库运维-常见故障定位案例-TPCC-WAL-内存

文章目录 openGauss学习笔记-189 openGauss 数据库运维-常见故障定位案例-TPCC-WAL-内存189.1 TPCC运行时&#xff0c;注入磁盘满故障&#xff0c;TPCC卡住的问题189.1.1 问题现象189.1.2 原因分析189.1.3 处理分析 189.2 备机处于need repair(WAL)状态问题189.2.1问题现象189.…

1876_电感的特性小结

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/g_hardware_basic: You should learn some hardware design knowledge in case hardware engineer would ask you to prove your software is right when their hardware design is wrong! 1876_电感的特性小结 主要是…

go 语言中的别名类型

什么是别名类型 我们可以用关键字 type 声明自定义的各种类型&#xff0c;类似&#xff1a; type People struct {name stringage int }当然了&#xff0c;这些类型必须在 Go 语言基本类型和高级类型的范畴之内。 在它们当中&#xff0c;有一种被叫做 ”别名类型” 的类型。…

现代密码学 补充1:两种窃听不可区分实验的区别

两种窃听不可区分实验 写在最前面两种窃听不可区分实验1. 完美保密中的窃听不可区分实验2. 窃听不可区分实验&#xff08;对称加密算法&#xff09;主要区别 写在最前面 两种窃听不可区分实验 两种窃听不可区分实验&#xff08;Eavesdropping Indistinguishability Experimen…