首页 > 编程知识 正文

has non-pointer type(高性能混泥土与结构混凝土)

时间:2023-05-05 11:33:56 阅读:73491 作者:2796

另一方面,Hp-socket组件介绍Hp-socket是一个通用的高性能TCP/UDP/HTTP通信框架,包括服务端组件、客户端组件和代理组件

HP-套接字完全封装了通信层,APP应用程序无需考虑通信层的细节,HP-Socket提供了基于事件通知模型的API接口,可以非常简单高效地集成到新旧APP应用程序中。

总之HPSocket应用非常简单,性能非常强大,现在最新版本v5.8.1

github地址: https://github.com/LDCs aa/HP-socket

二、介绍Hp-socket组件源代码目录结构下载zip数据包解压缩后,目录如下:

—DOC :目录包含官方文档,其中包括开发指南

— DotNet:net项目的开发步骤可以直接从nuget部署HPsocket.net

- Linux:Linux工程,包括安卓构建

—MacOS:mac环境的开发步骤

—Windows:Windows工程,最常见的开发环境

--zxdsj :编译的dll和lib

--Demo :官方提供的使用案例。 包括推送模型的例子、PULL模型的例子、PACK模型的例子、性能测试的例子和其他编程语言的例子

- -项目:项目的VS项目

--include :使用HP-socket库所需的头文件

--Src是核心功能的源代码,项目只是工程,源代码在这里

--Common是通用功能的源代码

- -其他语言的项目地址

目前支持Windows Linux平台

三、TCP网络通信程序一般在网络通信程序中,必须提到的是TCP,TCP属于传输层协议,使用范围非常广。

定义:传输控制协议(TCP )是一种面向连接、基于可靠字节流的传输层通信协议。

3.1tcp网络通信程序应考虑的问题在常见TCP格式的网络通信程序中,需要考虑以下问题。

1 .收发缓冲区的设计

2 .选择块、非块套接字

3 .选择/iocp完成端口模型(win ) )

4 .断包、粘包处理

5 .心跳的设计

6 .重新连接客户端邮件

7 .清除无效的死链

8 .关闭和优雅关闭

9 .等等。

本篇我们主要讨论问题4断包、粘包在hp-socket中的处理过程。

3.2选择HP-socket接收模式http://www.Sina.com/http://www.Sina.com /,因此socket接收的数据可能不是完整的软件包或粘合软件包。 此时,开箱组的包装需要APP应用层。 例如,客户端连续发送的分组大小分别是300、500和100。 然而,接收侧接收的数据可能是200、400、100、200。 因此,要处理接收到的数据,就需要进行数据包的组装和数据包的分解。

200小于1个数据包,因此需要组合以下数据包400。 此时,数据大小为600,但客户端发送的第一个数据包是300,因此此时必须将600拆分为300 300。 此时,可以得到第一个数据包300、剩下的数据300,但第二个数据包是500。 因为数据不足,所以需要组合以下数据100的合计数据400。 依然缺一个数据包。 继续分组剩下的200个。 此时,接收数据600,缺少一个数据包500,所以将600分解为500 100。 得到第二个分组500,其馀的数据100正好与第三个分组100相匹配。 数据包分析到此完成。 基本逻辑

wile(true ) { data_size=recv_data ); if(data_size包长度) continue; 继续接受//数据///循环的拆包,缺少一个数据包时继续接受数据并等待完整数据包的while(true )//足够的数据包长度。 data_size -=打开数据包长度。 //更新数据缓冲器并处理分组Han le _ pack (包); if(data_size数据包长度) break; }} 3.2.2Hp-Socket提供的三种接收模式HP-Socket提供推送/拉动/打包等接收模式,APP应用程序可以灵活选择手动、半自动或全自动方式处理封装

接收模型接收事件的说明推式接收(p sender,dwConnID,pData,iL

ength)手工方式/原生方式,有接收到数据就触发PULLOnReceive(pSender, dwConnID, iLength)半自动,通过应用层协议配合,一起处理粘包PACKOnReceive(pSender, dwConnID, pData, iLength)全自动,组件内部处理的粘包pData一定是一个完整的数据包PUSH 模型组件触发监听器对象的 OnReceive(pSender, dwConnID, pData, iLength)事件时,应用程序需要立即处理接收到的数据,如:粘包处理、协议解析等。组件不会对应用层的数据处理工作提供任何协助。PULL 模型组件触发监听器对象的 OnReceive(pSender, dwConnID, iTotalLength) 事件时,应用程序根据应用层协议检测接收到的数据长度(iTotalLength)是否满足处理条件,选择性地进行处理。 当 iTotalLength 小于当前期望的长度时可以忽略本次事 件 ;当iTotalLength 大 于 或 等 于 当 前 期 望 的 长 度 时 , 循 环 调 用 组 件 的Fetch(dwConnID, pData, iDataLength) 方法把需要的数据拉取出来,直到剩余的数据长度小于当前期望的长度。PULL 模型适用于完全清楚应用层协议,并且应用层协议可以根据当前数据包得知下一个数据包长度的场景。典型的场景如 Head + Body, Head 长度固定,第一个数据包为 Head,通过 Head 得知 Body 的长度,接收完 Body 之后下一个数据包一定为 Head。PACK 模型组件触发监听器对象的 OnReceive(pSender, dwConnID, pData, iLength)事件时,会保证 pData 是一个完整的数据包。 PACK 模型组件会对应用程序发送的每个数据包自动加上 4 字节(32 位) 的包头, 组件接收到数据时根据包头信息自动分包, 每个完整数据包通过 OnReceive 事件发送给应用程序。

通过以上分析,结合自己项目中通信协议,相信可以选择适合项目本身的接收模型。

三、本专栏目录

本专栏一共分9篇,如下:

0.Hp-socket高性能网络库零--整体结构

1.Hp-socket高性能网络库一--tcp组件push接收模型

2.Hp-socket高性能网络库二--tcp组件pull接收模型

3.Hp-socket高性能网络库三--tcp组件pack接收模型

4.Hp-socket高性能网络库四--ssl组件和运行环境

5.Hp-socket高性能网络库六--http组件和监听器事件

6.Hp-socket高性能网络库七--http组件Cookie管理

7.Hp-socket高性能网络库八--udp组件和参数配置

8.Hp-socket高性能网络库九--linux下编译和安装

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。