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

高性能 Windows Socket 组件 HP-Socket v3.0.2 正式发布

    博客分类:
  • 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.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) Bin/x86/HPSocket.dll         - (32位/MBCS/Release)
    (2) Bin/x86/HPSocket_D.dll    - (32位/MBCS/DeBug)
    (3) Bin/x86/HPSocket_U.dll    - (32位/UNICODE/Release)
    (4) Bin/x86/HPSocket_UD.dll - (32位/UNICODE/DeBug)
    (5) Bin/x64/HPSocket.dll         - (64位/MBCS/Release)
    (6) Bin/x64/HPSocket_D.dll    - (64位/MBCS/DeBug)
    (7) Bin/x64/HPSocket_U.dll    - (64位/UNICODE/Release)
    (8) Bin/x64/HPSocket_UD.dll - (64位/UNICODE/DeBug)

> 其它更新:

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

  1. 把组件接口以及监听器接口的声明移到 SocketInterface.h
  2. IServer 增加接口方法 GetConnectionCount()/GetConnectPeriod() 分别获取当前连接数和某个连接的时长
  3. IServer 接口方法 GetListenAddress()/GetClientAddress() 的 CString& 参数改为 LPTSTR
  4. IClient 接口方法 GetLocalAddress() 的 CString& 参数改为 LPTSTR
  5. IClient 接口方法 GetLocalAddress() 的 CString& 参数改为 LPTSTRSocketHelper.h 中所有全局函数的 CString& 参数均改为 LPTSTR
  6. 示例工程 TestEcho-Pull 和 TestEcho-PFM 改为用动态链接库方式使用 HP-Socket

> 升级说明:

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

  1. 使用 HP-Socket v3.0.1 的应用程序可以安全升级到 HP-Socket v3.0.2
  2. 由于某些接口方法的参数作了调整,因此请参考测试工程作相应修改
  3. 如果工程想通过动态链接库方式使用 HP-Socket,请参考 TestEcho-Pull 或 TestEcho-PFM 示例工程

*** 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

分享到:
评论

相关推荐

    m3u8下载器N-m3u8DL-CLI v3.0.2便携版.zip

    v3.0.2版本的更新带来了性能优化和稳定性提升,使得下载过程更加顺畅,减少了因网络波动或服务器问题导致的下载中断。此外,便携版设计意味着用户无需安装,可以直接运行程序,这极大地提高了使用的灵活性,无论是在...

    Wireshark-win32-3.0.2.zip

    这个压缩包"Wireshark-win32-3.0.2.zip"是2019年6月25日从官方网站下载的32位版本,适用于Windows操作系统。与之对应的64位版本为"Wireshark-win64-3.0.2"。本文将深入探讨Wireshark的功能、应用及其32位版本在...

    Wireshark-win64-3.0.2.zip

    到到官网下载的,日期2019-6-25 Wireshark-win64-3.0.2 鲨鱼 网络抓包 64位

    Z-Stack 3.0.2-.7z.zip_Z-STACK 3.0.2_Z-STACK-3.0.2_z-stack 3_z-st

    Z-Stack 3.0.2 是一个专为物联网(IoT)设计的网络协议栈,它由Zigbee联盟开发并广泛应用于智能家居、智能能源、工业自动化等领域。Zigbee是一种低功耗、低成本、自组织的无线通信技术,支持多跳网络,能构建大规模...

    qt-unified-linux-x64-3.0.2-online.run

    ubuntu系统下面安装qt时用到的,qt-unified-linux-x64-3.0.2-online.run,请您确认所需再下载。

    Mali-OpenGL-ES-Emulator-v3.0.2.g694a9-Windows-32bit.7z

    【标题】"Mali-OpenGL-ES-Emulator-v3.0.2.g694a9-Windows-32bit.7z" 指的是一款专为Mali GPU设计的OpenGL ES模拟器,版本号为3.0.2,g694a9是该版本的一个特定构建。OpenGL ES(OpenGL for Embedded Systems)是一...

    Mali-OpenGL-ES-Emulator-v3.0.2.g694a9-Windows-64bit

    《Mali OpenGL ES Emulator v3.0.2.g694a9 for Windows 64位:开启图形渲染模拟的新篇章》 OpenGL ES(OpenGL for Embedded Systems)是一种专为嵌入式设备设计的图形库,广泛应用于移动设备、游戏机、智能电视等...

    rt-thread-v3.0.2 源代码

    RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统。实时线程操作系统不仅仅是一个单一的实时操作系统内核,它也是一个完整的应用系统,包含了实时、嵌入式系统相关的...该资源是 RT-thread V3.0.2版本

    CHIBIOS-3.0.2-HAL-ReferenceManual-v3.0.2

    《CHIBIOS-3.0.2-HAL-ReferenceManual-v3.0.2》是关于ChibiOS实时操作系统的一个硬件抽象层(HAL)的详细参考手册。这个手册主要针对的是ardupilot APM项目,为开发者提供ChibiOS/RT 3.0.2版本的操作系统使用指南。 ...

    HP-Socket 3.0.2

    1、使用 HP-Socket v3.0.1 的应用程序可以安全升级到 HP-Socket v3.0.2 2、由于某些接口方法的参数作了调整,因此请参考测试工程作相应修改 3、如果工程想通过动态链接库方式使用 HP-Socket,请参考 TestEcho-Pull ...

    固件-CPU 1517H-3 PN V3.0.2.zip

    V3.0.2指的是该固件的版本号,通常更新固件是为了修复已知问题、提高性能或增加新功能。 固件升级对于保持设备的稳定性和安全性至关重要。CPU 1517H-3 PN的V3.0.2版本可能包含了对之前版本的改进,例如优化了处理...

    lazarus-1.6.4-fpc-3.0.2-cross-i386-win32-win64

    lazarus-1.6.4-fpc-3.0.2-cross-i386-win32-win64,1.84版本 ,

    CryptoJS v3.0.2

    CryptoJS v3.0.2

    apache-maven-3.0.2.zip

    "apache-maven-3.0.2.zip"是Apache Maven 3.0.2版本的压缩包文件,这个版本发布于2012年,虽然不是最新的,但仍然被许多项目所使用。下载并解压这个压缩包后,用户可以直接在本地环境中使用Maven,无需进行复杂的...

    aurora-v3.0.2s-release-1(2).exe

    aurora-v3.0.2s-release-1(2).exe

    poi-scratchpad-3.0.2-FINAL.jar

    poi-scratchpad-3.0.2-FINAL.jar

    Wireshark-win64-3.0.2.rar

    这个名为"Wireshark-win64-3.0.2.rar"的压缩包是Wireshark的Windows 64位版本,适用于处理大量的网络流量和深度分析。Wireshark在IT领域扮演着至关重要的角色,特别是对于网络管理员、安全专家和软件开发者,因为它...

    Wireshark-win64-3.0.2.msi

    Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

    mongo-java-driver-3.0.2.zip

    4. **异步API**:除了同步API外,3.0.2版本还引入了基于Java 8的异步API,利用了CompletableFuture,让开发者能够编写非阻塞代码,提高并发性能。 5. **GridFS支持**:MongoDB的GridFS是一个存储和检索大型文件的...

Global site tag (gtag.js) - Google Analytics