`
guaishou
  • 浏览: 172404 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

【圣诞呈献】高性能 Socket 组件 HP-Socket v3.1.1 正式发布

    博客分类:
  • C++
阅读更多

HP-Socket

  HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP/UDP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了功能测试示例(Test Echo)、性能测试示例(Test Echo-PFM)、PULL 模型测试示例(Test Echo-Pull) 和 UDP 测试示例(Test Echo-UDP),用户可以通过这几个测试示例入手,迅速掌握组件的设计思想和使用方法。

----------------------------------------------------------------

通用性

  • 通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;
  • 与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。

可用性

  可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。

高性能

  作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:

  • 客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。
  • 服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。

伸缩性

  可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。

   (项目主页:点击这里,下载地址:点击这里)


*** v3.1.1 更新 ***

 > 增加导出纯 C 函数的动态链接库 HPSocket4C.dll:

-----------------
  1. 增加代码文件 HPSocket4C.h 和 HPSocket4C.cpp,用于创建 HPSocket4C.dll
  2. 导出纯 C 函数,让其它语言(如:C/C#/Delphi 等)能方便地使用 HPSocket
  3. HPSocket4C.dll 使用方法
    方法一:
    ------------------------------------------------------------------------------
    (0) (C/C++ 程序)包含 HPSocket4C.h 头文件
    (1) 调用 ::Create_HP_XxxListener() 函数创建监听器对象
    (2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象
    (3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数
    (4) 调用相关导出函数操作 HPSocket 对象
    (5) ...... ......
    (6) 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象
    (7) 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象
    
    方法二:
    ------------------------------------------------------------------------------
    (1) 应用程序把需要用到的导出函数封装到特定语言的包装类中
    (2) 通过包装类封装后,以面向对象的方式使用 HPSocket
  4. 动态链接库发行版本
    (1) x86/HPSocket4C.dll		- (32位/MBCS/Release)
    (2) x86/HPSocket4C_D.dll	- (32位/MBCS/DeBug)
    (3) x86/HPSocket4C_U.dll	- (32位/UNICODE/Release)
    (4) x86/HPSocket4C_UD.dll	- (32位/UNICODE/DeBug)
    (5) x64/HPSocket4C.dll		- (64位/MBCS/Release)
    (6) x64/HPSocket4C_D.dll	- (64位/MBCS/DeBug)
    (7) x64/HPSocket4C_U.dll	- (64位/UNICODE/Release)
    (8) x64/HPSocket4C_UD.dll	- (64位/UNICODE/DeBug)

> 全面启用 Buffer Pool 缓存机制:

-----------------
  1. Common/Src 增加代码文件 bufferpool.h 和 bufferpool.cpp,实现 Buffer Pool 缓存机制
  2. 通过 Buffer Pool 缓存机制提升内存使用效率,减少动态内存分配和释放操作,避免内存空洞
  3. ICTcpClient 用 CItemPool 和 TItemList 实现发送缓冲区
  4. CUdpClient 用 CItemPool 和 TItemList 实现发送缓冲区
  5. CTcpPullClient 用 CItemPool 和 TItemList 实现发送缓冲区和 PULL 缓冲区
  6. CTcpPullServer 用 CBufferPool 和 TBuffer 实现 PULL 缓冲区

> 其它更新:

-----------------
  1. HPSocket.dll 和 HPSocket4C.dll 使用 /MT(d) 选项重新编译,消除对运行时库的依赖
  2. IServer 增加接口方法 DisconnectLongConnections() 用于断开所有超长连接
  3. IServer 删除接口方法 GetConnectionCriSec()
  4. IClient 增加方法 Get/SetFreeBufferPoolSize()、Get/SetFreeBufferPoolHold() 用于设置 Buffer Pool 缓存大小和阀值
  5. IPullServer 删除方法 Get/SetFreePullBufferPool()、Get/SetFreePullBufferHold()
  6. 增加示例工程 TestEcho-4C,展示 HPSocket4C.dll 的使用方法

> 升级说明:

-----------------
  1. 使用 HP-Socket v3.0.2 及以前版本的应用程序可以安全升级到 HP-Socket v3.1.1
  2. 如果工程想通过导入 HPSocket4C.dll 的方式使用 HP-Socket,请参考 TestEcho-4C 示例工程

*** v3.0.2 更新 ***

 > 把 HP-Socket 编译为动态链接库:

-----------------

  1. 应用程序可以通过导入源代码或动态链接库方式使用 HP-Socket
  2. 动态链接库使用方法
    方法一:
    ------------------------------------------------------------------------------
    (0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件
    (1) 调用 HP_Create_Xxx() 函数创建 HPSocket 对象
    (2) 使用完毕后调用 HP_Destroy_Xxx() 函数销毁 HPSocket 对象
    
    方法二:
    ------------------------------------------------------------------------------
    (0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件
    (1) 创建 CXxxWrapper 包装器,通过包装器智能指针使用 HPSocket 对象
  3. 动态链接库发行版本
    (1) x86/HPSocket.dll      - (32位/MBCS/Release)
    (2) x86/HPSocket_D.dll    - (32位/MBCS/DeBug)
    (3) x86/HPSocket_U.dll    - (32位/UNICODE/Release)
    (4) x86/HPSocket_UD.dll   - (32位/UNICODE/DeBug)
    (5) x64/HPSocket.dll      - (64位/MBCS/Release)
    (6) x64/HPSocket_D.dll    - (64位/MBCS/DeBug)
    (7) x64/HPSocket_U.dll    - (64位/UNICODE/Release)
    (8) x64/HPSocket_UD.dll   - (64位/UNICODE/DeBug)

*** v3.0.1 更新 ***

 > 新增 UDP 通信组件:

-----------------

  1. 新增两个 UDP 通信组件:CUdpServer 为服务端组件,CUdpClient 为客户端组件
  2. 服务端组件 CUdpServer 采用 IOCP 通信模型
  3. 客户端组件 CUdpClient 采用 Event Select 通信模型
  4. UDP 通信组件的接口与原 TCP 通信组件一致,简单实用
  5. UDP 通信组件内置通信线路自动监测机制
  6. 新增 UDP 通信组件示例工程 TestEcho-UDP

> 代码重构与优化:

-----------------

  1. 规范所有接口、类以及代码文件的命名
  2. 重构和优化了大量组件代码
  3. 服务端组件加入读写锁机制,有效平衡处理性能与安全性
  4. 服务端组件的 Socket 对象缓存列表设置了锁定时间,提高访问的安全性

*** v2.2.3 更新 ***

 > 连接 ID 的数据类型改为 ‘CONNID’:

-----------------

  1. 在SocketHelper.h 中定义 CONNID 数据类型(默认:typedef ULONG_PTR CONNID)
  2. 应用程序可以把 CONNID 定义为其希望的类型(如:ULONG / ULONGLONG 等)
  3. 为了便于移植与维护,应用程序的任何地方都应该用‘CONNID’类型引用连接 ID

> 服务端 Socket 组件支持为每个连接绑定附加数据:

-----------------

  1. IServerSocket 和 CIocpServer 增加方法 Get/SetConnectionExtra()
  2. 通过上述两个方法,应用程序可以为每个连接绑定任意附加数据并把数据获取出来

*** v2.2.2 更新 ***

  > 优化心跳检测相关功能:

 -----------------

  1. IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()
  2. CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000
  3. CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000

*** v2.2.1 更新 ***

> PULL 模型支持:

-----------------

  1. ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)
  2. 增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据

> Server:

-----------------

  1. 服务端 Socket 接口 ISocketServer 改名为 IServerSocket
  2. 增加 PULL Server Socket 监听器抽象类 CPullServerSocketListener
  3. 增加 PULL Server Socket 接口 IPullServerSocket
  4. 增加 PULL Server Socket 实现类 CIocpPullServer

> Client:

-----------------

  1. 客户端 Socket 接口 ISocketClient 改名为 IClientSocket
  2. 客户端 Socket 实现类 CSocketClient 改名为 CClientSocket
  3. 增加 PULL Client Socket 监听器抽象类 CPullClientSocketListener
  4. 增加 PULL Client Socket 接口 IPullClientSocket
  5. 增加 PULL Client Socket 实现类 CPullClientSocket

分享到:
评论

相关推荐

    2024年大数据软件项目深度研究分析报告.docx

    2024年大数据软件项目深度研究分析报告.docx

    《基于YOLOv8的社区健身步道积水结冰预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    chromedriver-mac-arm64-136.0.7103.25.zip

    chromedriver-mac-arm64-136.0.7103.25.zip

    2023年全国计算机二级JAVA考试练习题及答案.docx

    2023年全国计算机二级JAVA考试练习题及答案.docx

    苏苏源码-jspm010-课堂教学效果实时评价系统(论文+PPT).zip

    苏苏源码-jspm010-课堂教学效果实时评价系统(论文+PPT)

    操作系统设备管理.pptx

    操作系统设备管理.pptx

    2023年计算机等级考试WORD实训操作要点提示.docx

    2023年计算机等级考试WORD实训操作要点提示.docx

    汇川H3U PLC与触摸屏程序模板:基于Canlink总线的六轴运动控制及视觉定位系统

    内容概要:本文详细介绍了汇川H3U PLC平台上的一个创新架构,用于控制三个步进电机和三个CANlink总线伺服电机的运动控制系统。该系统集成了基恩士工业相机进行视觉定位,并实现了自动模式与手动干预之间的无缝切换。文中涵盖了多个关键技术点,如软暂停机制、TCP通信、寄存器直接操作以及异常恢复机制。通过这些技术手段,不仅提高了生产线的灵活性和稳定性,还显著减少了故障处理时间和换型时间。 适用人群:从事工业自动化控制系统的工程师和技术人员,特别是对PLC编程、运动控制和视觉定位感兴趣的读者。 使用场景及目标:本方案适用于需要高精度运动控制和快速异常处理的生产环境,旨在提高生产线的自动化水平和应对突发事件的能力。具体应用场景包括但不限于包装行业、电子制造和其他需要精确运动控制的制造业。 其他说明:文中提供了详细的代码片段和实施细节,帮助读者更好地理解和应用这些技术。此外,还分享了一些实际项目中的经验和技巧,如TCP心跳包处理、寄存器操作优化等。

    电动交通工具FOC电机控制代码解析:涵盖全功能及移植方案

    内容概要:本文详细介绍了大厂成熟的FOC(磁场定向控制)电机控制代码及其应用。该代码基于STM32平台,经过实际验证,能够稳定应用于电动交通工具。文中展示了多个关键技术点,包括转把信号处理、刹车逻辑、霍尔传感器修复、故障诊断模块以及核心FOC算法。此外,还讨论了代码的移植性和扩展性,特别是针对国产芯片的适配方法。通过这些技术手段,确保了系统的鲁棒性和高效性能。 适合人群:从事电动交通工具开发的技术人员,尤其是对FOC电机控制系统感兴趣的工程师。 使用场景及目标:适用于电动自行车、摩托车等电动交通工具的研发和生产。目标是提高产品的可靠性和性能,降低开发难度和成本。 其他说明:本文不仅提供了详细的代码实现,还分享了许多实践经验和技术细节,帮助开发者更好地理解和应用这些技术。

    2023年新版计算机一级考试试题一及答案解析.doc

    2023年新版计算机一级考试试题一及答案解析.doc

    MATLAB中基于NSGA2算法的分布式电源选址定容优化

    内容概要:本文详细介绍了使用NSGA2算法在MATLAB中实现分布式电源选址定容优化的方法。首先,文章解释了种群初始化、非支配排序、交叉操作以及拥挤度计算等关键步骤的实现细节。接着,重点讨论了目标函数的设计,如电压偏差和投资成本的计算方法。此外,文中还分享了一些实际应用中的经验和技巧,例如如何避免无效解、处理越界情况以及提高算法效率的方法。最后,通过实例展示了Pareto前沿的可视化及其在决策支持中的应用。 适合人群:具有一定MATLAB编程基础和技术背景的研究人员、工程师,尤其是从事电力系统优化领域的专业人士。 使用场景及目标:适用于需要解决分布式电源选址定容问题的实际工程项目,旨在帮助用户理解和掌握NSGA2算法的应用,从而更好地处理多目标优化问题,找到最优折衷解集。 其他说明:文中提供了详细的代码片段和实现思路,有助于读者深入理解NSGA2算法的工作原理及其在电力系统优化中的具体应用。同时,文中提到的一些改进措施和注意事项也为进一步研究提供了有价值的参考。

    YOLOv5开源代码解析与深度学习目标检测入门

    内容概要:本文深入剖析了YOLOv5的官方开源代码,详细解读了其各个关键模块的功能和实现细节。首先介绍了数据加载部分,展示了如何处理摄像头输入以及数据增强的方法,如随机透视变换和HSV颜色抖动。接着探讨了模型定义中的核心组件,如Detect模块和C3模块的设计理念及其背后的数学原理。随后讲解了损失函数的计算方式,包括位置损失、分类损失和交并比损失的综合应用。此外,还讨论了训练过程中的一些高级技巧,如智能参数分组优化和非极大值抑制的实现。最后强调了官方注释的重要性和实用性,指出这些注释能够帮助开发者更好地理解和修改代码。 适合人群:对深度学习尤其是目标检测感兴趣的初学者和有一定编程基础的研发人员。 使用场景及目标:①理解YOLOv5的工作原理和技术细节;②掌握如何利用官方代码进行定制化开发;③提高对工业级项目的认识,学习优秀的编码风格和最佳实践。 其他说明:建议读者结合实际项目进行练习,通过调试和修改代码来加深理解。同时,可以参考官方文档和其他相关资料,进一步拓展知识面。

    永磁同步电机负载转矩扰动的滑模观测器(SMO)控制与优化

    内容概要:本文详细介绍了滑模观测器(SMO)在永磁同步电机(PMSM)控制系统中对抗负载转矩扰动的应用。首先解释了负载转矩扰动对电机性能的影响,接着展示了SMO的基本原理及其C语言和Python实现方式。文中特别强调了sign函数的作用以及其导致的抖振问题,并提出了使用饱和函数和平滑处理的方法进行改进。此外,讨论了不同工况下的参数调整技巧,如低速情况下的特殊处理和基于模糊逻辑的自适应调参方法。最后,通过MATLAB仿真验证了SMO的有效性和鲁棒性。 适合人群:从事电机控制领域的工程师和技术人员,尤其是对永磁同步电机感兴趣的研究者。 使用场景及目标:适用于需要提高永磁同步电机抗负载扰动能力的实际工程项目,旨在减少因负载变化引起的转速波动,确保系统的稳定性和可靠性。 其他说明:文中提供了大量代码片段作为实例,帮助读者更好地理解和实施滑模观测器的设计与优化。同时提醒读者关注参数选择的经验法则以及硬件条件对控制效果的影响。

    Matlab实现的各种人工智能算法代码.zip

    matlab

    2024年第十五届蓝桥杯Java B组省赛真题

    蓝桥杯javab组真题合集以上是蓝桥杯Java B组部分真题的合集,涵盖了2022年、2023年和2024年的部分题目。这些题目涵盖了常见的算法和数据结构问题,如动态规划、贪心算法、字符串处理、矩阵操作等。通过这些真题的练习,可以帮助参赛者更好地准备蓝桥杯比赛,提升编程能力和解题技巧。

    CCF-GESP(China Computer Federation - General Examination for Software Programming)是中国计算机学会推出的编程能力等级认

    CCF-GESP(China Computer Federation - General Examination for Software Programming)是中国计算机学会推出的编程能力等级认证考试,旨在为青少年提供一个科学、权威的编程能力评价体系。GESP考试分为多个级别,覆盖了从基础到高级的不同编程技能水平。 ### CCF-GESP 基础学习指南 #### 1. 确定目标级别 首先,了解GESP的不同级别以及每个级别的具体内容和要求是非常重要的。根据考生的实际编程经验和知识水平选择合适的目标级别进行准备。 #### 2. 学习编程语言 - **Python**:对于初学者来说,Python是一个很好的开始,因为它语法简洁清晰,易于理解。 - **C++** 或 **Scratch**:除了Python之外,GESP也支持使用C++或Scratch进行考试。选择哪种语言取决于你的兴趣和未来的学习方向。 #### 3. 掌握基础知识 无论选择哪种语言,都需要掌握以下基本概念: - **变量与数据类型**:了解如何定义变量及不同类型的变量(如整型、浮点型、字符串等)。 - **控制结构**:包括条件语句(if, else)、循环语句(for, while)。 - **函数/方法**:学习如何定义和调用函数,理解参数传递的概念。 - **数组与列表**:掌握一维数组或列表的操作。 - **输入输出**:熟悉程序如何接收用户输入和向屏幕输出信息。 #### 4. 实践练习 理论学习固然重要,但实践是提高编程技能的关键。可以通过以下方式加强练习: - **在线平台**:利用LeetCode、Codeforces等网站上的题目进行练习。 - **项目开发**:尝试完成一些小型项目,比如简单的游戏、工具软件等,这有助于加深对知识点的理解并提升解决实际问题的能力。

    基于BES-SVM算法的秃鹰搜索优化与数据分类预测的Matlab实现

    内容概要:本文详细介绍了如何利用秃鹰搜索算法(BES)优化支持向量机(SVM)的参数进行数据分类预测。首先解释了BES的工作原理及其相对于传统方法的优势,如更快地找到最优解和更高的分类准确性。接着展示了具体的Matlab代码实现步骤,包括环境搭建、数据预处理、参数设置、BES优化主循环以及最终模型的训练和评估。文中特别强调了参数范围的选择、适应度函数的设计和Libsvm工具箱的正确使用。此外,还提供了一些常见的注意事项和改进建议。 适合人群:具有一定编程基础并对机器学习感兴趣的开发者和技术爱好者。 使用场景及目标:适用于需要高效优化SVM参数以提高分类性能的应用场景,特别是在处理高维数据时。主要目标是帮助读者掌握BES-SVM的具体实现方法,并能够在实际项目中应用。 其他说明:文章不仅提供了完整的代码示例,还包括了详细的注释和解释,便于初学者理解和学习。同时提醒读者注意操作系统兼容性和内存限制等问题。

    2023年自考计算机系统结构试题答案.doc

    2023年自考计算机系统结构试题答案.doc

    2023年操作系统实验报告实验一进程管理.doc

    2023年操作系统实验报告实验一进程管理.doc

    2023年助理通信工程师考试.doc

    2023年助理通信工程师考试.doc

Global site tag (gtag.js) - Google Analytics