HP-Socket/Windows/Change-Log.txt
2024-01-24 16:56:24 +08:00

1492 lines
56 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

==========================================================================================
v6.0.1 更新:
==========================================================================================
> 主要更新:
-----------------
1、用 VS2022 及后续编译器编译 HP-Socket会自动为 HP-Socket 工作线程设置唯一线程名称,方便跟踪调试
2、TCP Client/Agent 以同步方式连接服务端时,支持通过 SetSyncConnectTimeout() 设置连接超时时间
> 升级说明:
-----------------
1、HP-Socket v6.0.1 兼容 HP-Socket v5.9.5 版本,可以直接替换升级
==========================================================================================
v5.9.5 更新:
==========================================================================================
> 主要更新:
-----------------
1、问题修复由于 v5.9.4 版本升级了 KCP 导致 UDP ARQ 组件不可用
> 升级说明:
-----------------
1、HP-Socket v5.9.5 兼容 HP-Socket v5.9.4 版本,可以直接替换升级
==========================================================================================
v5.9.4 更新:
==========================================================================================
> 第三方库更新:
-----------------
1、openssl 升级到 3.0.12 版本
2、llhttp 升级到 9.1.3 版本
3、brotli 升级到 1.1.0 版本
> 升级说明:
-----------------
1、HP-Socket v5.9.4 兼容 HP-Socket v5.9.3 版本,可以直接替换升级
==========================================================================================
v5.9.3 更新:
==========================================================================================
> 主要更新:
-----------------
1、问题修复通过 POST/PUT 等带有请求内容的 HTTP 方法升级 websocket 协议时,可能会导致 HTTP Server 异常
2、UDP Client/Server 之间的单个心跳包发送失败不会立刻断开连接,只检测心跳是否超时来判断是否要断开连接
> 第三方库更新:
-----------------
1、openssl 升级到 1.1.1v 版本
2、llhttp 升级到 8.1.1 版本
> 升级说明:
-----------------
1、HP-Socket v5.9.3 兼容 HP-Socket v5.9.2 版本,可以直接替换升级
==========================================================================================
v5.9.2 更新:
==========================================================================================
> 主要更新:
-----------------
1、HTTP Cookie 请求和响应头 CookieSet-Cookie 支持不区分大小写
2、小范围代码优化
> 第三方库更新:
-----------------
1、openssl 升级到 1.1.1u 版本
> 升级说明:
-----------------
1、HP-Socket v5.9.2 兼容 HP-Socket v5.9.1 版本,可以直接替换升级
==========================================================================================
v5.9.1 更新:
==========================================================================================
> 主要更新:
-----------------
1、更新流式压缩/解压相关的若干 API支持分段压缩/解压参考Change-APIs.txt
2、更新 SSL 模块,支持 OpenSSL 3.0
> 第三方库更新:
-----------------
1、llhttp 升级到 8.1.0 版本
2、zlib 升级到 1.2.13 版本
3、openssl 升级到 1.1.1s 版本
4、mimalloc 升级到 1.7.9 版本
5、jemalloc 升级到 5.3.0 版本
> 升级说明:
-----------------
1、除了流式压缩/解压相关的若干 API 外HP-Socket v5.9.1 兼容 HP-Socket v5.8.8 版本,如果没有用到流式压缩/解压 API 可以直接替换升级
==========================================================================================
v5.8.8 更新:
==========================================================================================
> 主要更新:
-----------------
1、Client/Agent 连接服务端时支持指定主机名称,格式:<hostaddress>[^<hostname>],其中 ^<hostname> 可选。应用场景之一:通过代理服务器向目标服务器传递 SSL SNI hostname
2、增加字符编码转换系列函数参考Change-APIs.txt支持指定源字符串长度
3、修复 SSL Pull/Pack Server/Agent 组件在手工启动SSLSetSSLAutoStart(FALSE))场景下的异常问题
> 第三方库更新:
-----------------
1、zlib 升级到 1.2.12 版本
2、openssl 升级到 1.1.1n 版本
> 升级说明:
-----------------
1、HP-Socket v5.8.8 完全兼容 HP-Socket v5.8.7 版本,可以直接替换升级
==========================================================================================
v5.8.7 更新:
==========================================================================================
> 主要更新:
-----------------
1、优化垃圾对象回收检测机制提高通信组件在高负载、高并发场景的健壮性
2、支持 VS 2022 开发环境
> 第三方库更新:
-----------------
1、mimalloc 升级到 1.7.5 版本
> 升级说明:
-----------------
1、HP-Socket v5.8.7 完全兼容 HP-Socket v5.8.6 版本,可以直接替换升级
==========================================================================================
v5.8.6 更新:
==========================================================================================
> 主要更新:
-----------------
1、增加 ZLib/GZip、Brotil 流式压缩/解压组件IHPCompressor 和 IHPDecompressor
2、优化垃圾对象回收检测机制提高通信组件在高负载、高并发场景的健壮性
> 第三方库更新:
-----------------
1、openssl 升级到 1.1.1m 版本
2、llhttp 升级到 6.0.6 版本
3、mimalloc 升级到 1.7.3 版本
> 升级说明:
-----------------
1、HP-Socket v5.8.6 完全兼容 HP-Socket v5.8.5 版本,可以直接替换升级
==========================================================================================
v5.8.5 更新:
==========================================================================================
> 主要更新:
-----------------
1、增加线程池监听器接口 IHPThreadPoolListener监听线程池生命周期事件
2、消除隐患Client 系列组件用作函数局部变量时,如果使用不当可能会在销毁 Client 对象时崩溃
3、支持通过指定平台工具集编译
4、增加 MSBuild 一键编译脚本
5、代码优化提高代码健壮性
> 第三方库更新:
-----------------
1、openssl 升级到 1.1.1l 版本
2、llhttp 升级到 6.0.5 版本
> 升级说明:
-----------------
1、HP-Socket v5.8.5 完全兼容 HP-Socket v5.8.4 版本,可以直接替换升级
==========================================================================================
v5.8.4 更新:
==========================================================================================
> 主要更新:
-----------------
1、增加全局函数SYS_Calloc()、SYS_Alloca()
2、TCP 系列组件增加接口方法SetNoDelay()、IsNoDelay()
> 第三方库更新:
-----------------
1、mimalloc 升级到 1.7.2 版本
2、llhttp 升级到 6.0.4 版本
> 升级说明:
-----------------
1、HP-Socket v5.8.4 完全兼容 HP-Socket v5.8.3 版本,可以直接替换升级
==========================================================================================
v5.8.3 更新:
==========================================================================================
> 主要更新:
-----------------
1、Bug 修复ARQ UDP 组件发送数据时可能发生死锁
> 第三方库更新:
-----------------
1、mimalloc 升级到 1.7.1 版本
2、llhttp 升级到 6.0.2 版本
3、OpenSSL 升级到 1.1.1k 版本
> 升级说明:
-----------------
1、HP-Socket v5.8.3 完全兼容 HP-Socket v5.8.2 版本,可以直接替换升级
==========================================================================================
v5.8.2 更新:
==========================================================================================
> 第三方库更新:
-----------------
1、mimalloc 升级到 1.7.0 版本
2、llhttp 升级到 4.0.0 版本
3、OpenSSL 升级到 1.1.1j 版本
> 升级说明:
-----------------
1、HP-Socket v5.8.2 完全兼容 HP-Socket v5.8.1 版本,可以直接替换升级
==========================================================================================
v5.8.1 更新:
==========================================================================================
> 第三方库更新:
-----------------
1、HTTP 解析器llhttp 取代 http_parser
2、内存分配器mimalloc 取代 jemalloc
3、OpenSSL 升级到 1.1.1i 版本
> 其他更新:
-----------------
1、库公开头文件移到 include/hpsocket 目录
2、Windows目录结构调整Common/Src 改为 Src/CommonCommon/Lib 改为 Dependent
> 升级说明:
-----------------
1、HP-Socket v5.8.1 完全兼容 HP-Socket v5.7.3 版本,可以直接替换升级
==========================================================================================
v5.7.3 更新:
==========================================================================================
> 常规更新:
-----------------
1、增加 Brotli 压缩/解压支持,(提供 _BROTLI_DISABLED 预编译宏用于关闭 Brotli 库功能)
2、OpenSSL 升级到 1.1.1h 版本
> 升级说明:
-----------------
1、HP-Socket v5.7.3 完全兼容 HP-Socket v5.7.2 版本,可以直接替换升级
==========================================================================================
v5.7.2 更新:
==========================================================================================
> 常规更新:
-----------------
1、代码优化提高稳定性
2、OpenSSL 升级到 1.1.1g 版本
3、http-parser 升级到 2.9.4 版本
4、kcp 升级到 1.6 版本
> 升级说明:
-----------------
1、HP-Socket v5.7.2 完全兼容 HP-Socket v5.7.1 版本,可以直接替换升级
==========================================================================================
v5.7.1 更新:
==========================================================================================
> UDP 组件更新:
-----------------
1、增加新组件UDP Node
1) UDP Node 没有“连接”的概念,可以与任意地址相互收发数据
2) UDP Node 支持三种运行模式:单播、组播和广播
3) 增加 UDP Node 组件示例 Demo TestUDPNode
> 其它更新:
-----------------
1、所有组件增加 Wait() 方法,用于等待组件关闭
2、所有通信组件增加 SetReuseAddressPolicy() 方法,支持设置地址重用策略
3、所有 SSL 通信组件增加 SetSSLCipherList() 方法,支持设置 SSL 加密套件
4、大量 API 更新,代码重构、优化
> 升级说明:
-----------------
1、HP-Socket v5.7.1 改动或删除了一些旧版本的 API升级时请参考 Chang-APIs.txt
==========================================================================================
v5.6.4 更新:
==========================================================================================
> 常规更新:
-----------------
1、代码优化提高稳定性
> 升级说明:
-----------------
1、HP-Socket v5.6.4 完全兼容 HP-Socket v5.6.3 版本,可以直接替换升级
==========================================================================================
v5.6.3 更新:
==========================================================================================
> 常规更新:
-----------------
1、代码优化提高稳定性
> 升级说明:
-----------------
1、HP-Socket v5.6.3 完全兼容 HP-Socket v5.6.2 版本,可以直接替换升级
==========================================================================================
v5.6.2 更新:
==========================================================================================
> 常规更新:
-----------------
1、代码优化提高稳定性
2、修复 v5.6.1 版本中 SSL 组件对 Windows XP 系统不兼容的问题
> 升级说明:
-----------------
1、HP-Socket v5.6.2 完全兼容 HP-Socket v5.6.1 版本,可以直接替换升级
==========================================================================================
v5.6.1 更新:
==========================================================================================
> SSL 组件更新:
-----------------
1、所有 SSL 组件增加以下接口方法支持加载内存证书
1) ServerSetupSSLContextByMemory(), AddSSLContextByMemory()
2) AgentSetupSSLContextByMemory()
3) ClientSetupSSLContextByMemory()
2、所有 SSL 组件增加 GetSSLSessionInfo() 方法,用来获取 SSL 会话相关信息
3、SSL Server 组件提供默认的 SNI 服务器域名绑定机制,大多数情形下应用程序不必自定义 SNI 回调函数
1) 当 SetupSSLContext() 的 'fnServerNameCallback' 参数值为 nullptr 则启用默认的服务器域名绑定机制
2) BindSSLServerName():绑定服务器域名到指定证书
3) HP_SSL_DefaultServerNameCallback():默认 SNI 回调函数
> HTTP 组件更新:
-----------------
1、HTTP Server 组件的 SendWSMessage() 方法删除 lpszMask 参数
2、所有 HTTP 组件的 SendWSMessage() 方法的 pData 参数类型改为 const BYTE*,因此可以传入常量
3、所有 HTTP 组件添加 SendChunkData() 方法以方便地发送 Chunked 数据
> UDP 组件更新:
-----------------
1、优化 Linux 平台的 UDP Cast 组件,使得其与 Windows 平台的 UDP Cast 组件保持行为一致
2、提升所有 UDP 组件的 IPv6 兼容性
3、UDP Client/Server 组件关闭时自动向对端发送“关闭通知”数据报
> 其他更新:
-----------------
1、jemalloc 升级到 5.2.1 版本
2、OpenSSL 升级到 1.1.1d 版本
3、代码优化提高稳定性
> 升级说明:
-----------------
1、HP-Socket v5.6.1 基本兼容 HP-Socket v5.5.3 版本HTTP 组件的 SendWSMessage() 方法除外)
==========================================================================================
v5.5.3 更新:
==========================================================================================
> 常规更新:
-----------------
1、代码优化提高稳定性
2、OpenSSL 升级到 1.1.0k 版本
> 升级说明:
-----------------
1、HP-Socket v5.5.3 完全兼容 HP-Socket v5.5.2 版本,可以直接替换升级
==========================================================================================
v5.5.2 更新:
==========================================================================================
> UDP 更新:
-----------------
1、放宽 UDP 组件的最大报文长度限制SetMaxDatagramSize() 方法的最大值可以设置到 64KB
2、放宽 ARQ UDP 组件的最大传输单元长度限制SetMaxTransUnit() 方法的最大值可以设置到 64KB
> 其他更新:
-----------------
1、完善 Delphi SDK 及其示例 Demo
> 升级说明:
-----------------
1、HP-Socket v5.5.2 完全兼容 HP-Socket v5.5.1 版本,可以直接替换升级
==========================================================================================
v5.5.1 更新:
==========================================================================================
> UDP 更新:
-----------------
1、增加 ARQ UDP 组件IUdpArqServer、IUdpArqClient
2、增加 ARQ UDP 示例 TestEcho-ARQ 和性能测试示例 TestEcho-ARQ-PFM
3、ARQ UDP 组件详细说明请参考开发文档 《HP-Socket Development Guide》
4、优化 IUdpServer 组件,修复潜在缺陷
5、C# SDK 增加 UDP 组件封装类
> 其他更新:
-----------------
1、jemalloc 升级到 5.2.0 版本
2、http-parser 升级到 2.9.2 版本
> 升级说明:
-----------------
1、HP-Socket v5.5.1 完全兼容 HP-Socket v5.4.4 版本,可以直接替换升级
==========================================================================================
v5.4.4 更新:
==========================================================================================
> TCP 组件更新:
-----------------
1、IAgent 组件支持在连接服务器时指定本地IP地址和本地端口
> 其他更新:
-----------------
1、代码优化
2、http-parser 升级到 2.9.0 版本
3、OpenSSL 升级到 1.1.0j 版本
4、提供 _UDP_DISABLED 预编译宏用于移除 UDP 组件
> 升级说明:
-----------------
1、HP-Socket v5.4.4 完全兼容 HP-Socket v5.4.3 版本,可以直接替换升级
==========================================================================================
v5.4.3 更新:
==========================================================================================
> HTTP 组件更新:
-----------------
1、HTTP 组件可以手工启动 HTTP 通信,从而可以对 HTTP 通信执行 SOCKS 代理服务器设置等前置操作
2、HTTP 组件Server/Agent/Client增加以下接口方法支持手工启动 HTTP 通信
1) StartHttp():手工启动 HTTP 通信,当通信组件设置为非自动启动时,需要调用本方法启动 HTTP 通信
2) SetHttpAutoStart():设置 HTTP 通信启动方式默认TRUE自动启动
3) IsHttpAutoStart():获取 HTTP 通信启动方式
> 其他更新:
-----------------
1、Bug 修复UDP Server 在高并发场景下可能重复触发 OnAccept 事件
> 升级说明:
-----------------
1、HP-Socket v5.4.3 完全兼容 HP-Socket v5.4.2 版本,可以直接替换升级
==========================================================================================
v5.4.2 更新:
==========================================================================================
> SSL 组件更新:
-----------------
1、SSL 组件可以手工启动 SSL 握手,从而可以对 SSL/Https 通信执行代理服务器设置等前置操作
2、SSL 组件Server/Agent/Client增加以下接口方法支持手工启动 SSL 握手
1) StartSSLHandShake():手工启动 SSL 握手,当通信组件设置为非自动握手时,需要调用本方法启动 SSL 握手
2) SetSSLAutoHandShake()设置通信组件握手方式默认TRUE自动握手
3) IsSSLAutoHandShake():获取通信组件握手方式
> 其他更新:
-----------------
1、所有可能导致 Socket 关闭的组件接口方法都在 Socket 通信线程中异步触发 OnClose 事件
2、Server 与 Agent 组件的 DIRECT 发送策略也支持通过 GetPendingDataLength() 方法实现流控
3、Server 与 Agent 组件的 Disconnect() 方法不再支持非强制断开仍然保留bForce 参数),调用时都会强制断开
4、OnSend 事件支持 三种同步策略
1) OSSP_NONE不同步默认
2) OSSP_CLOSE同步 OnClose
3) OSSP_RECEIVE同步 OnClose 和 OnReceive只用于 TCP 组件)
5、OpenSSL 升级到 1.1.0i 版本
> 升级说明:
-----------------
1、HP-Socket v5.4.2 完全兼容 HP-Socket v5.4.1 版本,可以直接替换升级
==========================================================================================
v5.4.1 更新:
==========================================================================================
> 加入线程池公共组件:
-----------------
1、加入 IHPThreadPool 线程池公共组件
2、IHPThreadPool 主要方法:
1) Start启动线程池
2) Stop关闭线程池
3) Submit提交任务
4) AdjustThreadCount调整线程池大小
> 接口更新:
-----------------
1、IAgent 接口的 Connect() 方法增加参数 usLocalPort连接时可绑定本地端口
2、IClient 接口的 Start() 方法增加参数 usLocalPort连接时可绑定本地端口
3、IClient/IAgent/IServer 接口增加方法 IsConnected(),检测是否有效连接
> 其他更新:
-----------------
1、修复已知问题
2、性能优化
> 升级说明:
-----------------
1、HP-Socket v5.4.1 完全兼容 HP-Socket v5.3.2 版本,可以直接替换升级
==========================================================================================
v5.3.2 更新:
==========================================================================================
> 常规更新:
-----------------
1、更新版本号保持与 Linux 版的版本号同步
> 升级说明:
-----------------
1、HP-Socket v5.3.2 完全兼容 HP-Socket v5.3.1 版本,可以直接替换升级
==========================================================================================
v5.3.1 更新:
==========================================================================================
> 常规更新:
-----------------
1、修复 C# SDK 关于 SSL 初始化失败 Bug
2、http-parser 升级到 2.8.1 版本
3、OpenSSL 升级到 1.1.0h 版本
4、提供 _ZLIB_DISABLED 预编译宏用于关闭 zlib 库功能
> 升级说明:
-----------------
1、HP-Socket v5.3.1 完全兼容 HP-Socket v5.2.1 版本,可以直接替换升级
==========================================================================================
v5.2.1 更新:
==========================================================================================
> 发布包调整:
-----------------
1、版本号修订Windows 和 Linux 发行版使用统一版本号
2、发布文件不再区分非 SSL DLL 和 SSL DLL统一为 HPSocket DLL 和 HPSocket4C DLL
3、发布文件默认包含 SSL 和 HTTP 组件
4、如果想移除 SSL 或 HTTP 组件,可以分别定义 _SSL_DISABLED 或 _HTTP_DISABLED 宏重新编译
> 其他更新:
-----------------
1、代码优化和已知 Bug 修复
> 升级说明:
-----------------
1、HP-Socket v5.2.1 完全兼容 HP-Socket v5.1.1 版本,可以直接替换升级
==========================================================================================
v5.1.1 更新:
==========================================================================================
> 增加暂停接收功能:
-----------------
1、所有 Server/Agent/Client 组件增加暂停接收数据功能UDP Server 组件除外)
2、API 更新:
1 HP_Server_PauseReceive (增加)
2 HP_Server_IsPauseReceive (增加)
3 HP_Agent_PauseReceive (增加)
4 HP_Agent_IsPauseReceive (增加)
5 HP_Client_PauseReceive (增加)
6 HP_Client_IsPauseReceive (增加)
> 其它更新:
-----------------
1、TCP Agent 增加方法 HP_Agent_ConnectWithExtra(),支持在连接完成前绑定附加数据
2、公共代码包 vc-common-src 版本升级到 v2.3.22
3、OpenSSL 升级到 1.1.0g
> 升级说明:
-----------------
1、HP-Socket v5.1.1 完全兼容 HP-Socket v5.0.2 版本,可以直接替换升级
==========================================================================================
v5.0.2 更新:
==========================================================================================
> Bug 修复:
-----------------
1、修复 PULL/PACK 组件偶尔可能会意外崩溃 Bug
2、受影响组件Pull Server、Pull Agent、Pack Server、Pack Agent
> 升级说明:
-----------------
1、HP-Socket v5.0.2 完全兼容 HP-Socket v5.0.1 版本,可以直接替换升级
==========================================================================================
v5.0.1 更新:
==========================================================================================
> IPv6 支持:
-----------------
1、所有通信组件支持 IPv6
2、组件接口没有变化组件内部通过传入的地址参数自动识别 IPv4 / IPv6
3、API 更新:
1 enum En_HP_IPAddrType (增加)
2 struct HP_TIPAddr (增加)
3 SYS_GetIPv4InAddr (删除)
4 SYS_GetOptimalIPByHostName (删除)
5 SYS_IsIPAddress (修改)
6 SYS_GetIPAddress (修改)
7 SYS_EnumHostIPAddresses (增加)
8 SYS_FreeHostIPAddresses (增加)
> SSL 通信组件:
-----------------
1、多 SSL 证书支持,每个通信组件对象可以使用不同的 SSL 证书
2、通信组件对象绑定独立的 SSL Context取代旧版本的全局唯一 SSL Context
3、API 更新:
1 HP_SSL_Initialize (删除)
2 HP_SSL_Cleanup (删除)
3 HP_SSL_IsValid (删除)
4 HP_SSLAgent_SetupSSLContext (增加)
5 HP_SSLClient_SetupSSLContext (增加)
6 HP_SSLServer_SetupSSLContext (增加)
7 HP_SSLServer_AddSSLContext (增加)
8 HP_SSLAgent_CleanupSSLContext (增加)
9 HP_SSLClient_CleanupSSLContext (增加)
10 HP_SSLServer_CleanupSSLContext (增加)
> 其它更新:
-----------------
1、Demo 更新:所有 Demo 支持 IPv6所有 SSL Demo 支持新的证书机制
2、公共代码包 vc-common-src 升级到 v2.3.20
> 升级说明:
-----------------
1、SSL 组件:需要调整 SSL Context 初始化方式
2、其他组件HP-Socket v5.0.1 完全兼容 HP-Socket v4.x.x 版本,可以直接替换升级
==========================================================================================
v4.3.1 更新:
==========================================================================================
> HTTP
-----------------
1、IHttpClient 和 IHttpAgent 组件兼容没有长度标识Content-Length Header的 HTTP 响应报文
2、IHttpClient 和 IHttpAgent 组件改进 HEAD 请求的响应处理方式,应用程序无需在 OnHeadersComplete 事件中返回特殊值 HPR_SKIP_BODY
> 其它更新:
-----------------
1、公共代码包 vc-common-src 升级到 v2.3.19
2、OpenSSL 升级到 1.1.0f
3、优化 IServer/IAgent 组件,提升性能和稳定性
> 升级说明:
-----------------
1、HP-Socket v4.3.1 完全兼容 HP-Socket v4.2.1 版本,可以直接替换升级
==========================================================================================
v4.2.1 更新:
==========================================================================================
> HTTP Cookie 管理:
-----------------
1、新增 Cookie 管理器,可在不同连接、不同组件对象间共享 Cookie
2、Cookie 管理器实现了标准 HTTP Cookie 功能,支持 Max-Age、expires、httpOnly、secure
3、Cookie 管理器支持 Cookie 序列化与反序列化
4、IHttpClient 和 IHttpAgent 组件可通过 SetUseCookie() 方法设置是否开启 Cookie 功能
> HTTP Sync Client 通信组件:
-----------------
1、Create_HP_HttpSyncClient 和 Create_HP_HttpsSyncClient 方法增加可选参数 pListener
2、如果 pListener 非空则可以通过 pListener 监听 HttpSyncClient 的所有通信事件
> 其它更新:
-----------------
1、Demo 更新HttpProxyTestEcho-HttpTestEcho-Http-4C
2、公共代码包 vc-common-src 升级到 v2.3.18
3、OpenSSL 升级到 1.1.0e
> 升级说明:
-----------------
1、HTTP Sync Client 组件:需要调整 Create_HP_HttpSyncClient 和 Create_HP_HttpsSyncClient 的调用参数
2、其他组件HP-Socket v4.2.1 完全兼容 HP-Socket v4.1.x 版本,可以直接替换升级
==========================================================================================
v4.1.3 更新:
==========================================================================================
> 代码调整:
-----------------
1、修正 ITcpServer 和 ITcpAgent 组件的 Onclose 事件在 SP_DIRECT 发送模式下的触发规则
2、IClient 组件优化,提高稳定性
> 升级说明:
-----------------
1、HP-Socket v4.1.3 完全兼容 HP-Socket v4.1.2 版本,可以直接替换升级
==========================================================================================
v4.1.2 更新:
==========================================================================================
> 代码调整:
-----------------
1、采用新环形缓冲区算法提高异步操作安全性
2、采用延时释放策略提高 HTTP 异步操作安全性
> 升级说明:
-----------------
1、HP-Socket v4.1.2 完全兼容 HP-Socket v4.1.1 版本,可以直接替换升级
==========================================================================================
v4.1.1 更新:
==========================================================================================
> WebSocket 支持:
-----------------
1、所有 HTTP 组件增加 WebSocket 方法:
1) SendWSMessage(): 发送 WebSocket 数据包
2 GetWSMessageState(): 获取当前 WebSocket 状态
2、所有 HTTP 组件监听器增加 WebSocket 事件:
1) OnWSMessageHeader(): WebSocket 数据包头通知
2) OnWSMessageBody(): WebSocket 数据包体通知
3) OnWSMessageComplete(): WebSocket 数据包完成通知
3、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 支持 WebSocket
> 增加 HTTP Sync Client 通信组件:
-----------------
1、HTTP Sync Client 实现同步 HTTP 通信,不需要事件监听器
2、HTTP Sync Client 组件类: CHttpSyncClient、CHttpsSyncClient
3、HTTP Sync Client 实现接口: ITcpClient / IHttpSyncRequester
4、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 提供 HTTP Sync Client 示例
> 升级说明:
-----------------
1、HP-Socket v4.1.1 完全兼容 HP-Socket v4.0.1 版本,可以直接替换升级
==========================================================================================
v4.0.1 更新:
==========================================================================================
> 增加 HTTP 系列通信组件:
-----------------
1、新增 HTTP Server 组件:
1) 组件类: CHttpServer、CHttpsServer
2) 实现接口: ITcpServer / IComplexHttpResponder
3) 监听器接口: IHttpServerListener
2、新增 HTTP Agent 组件:
1) 组件类: CHttpAgent、CHttpsAgent
2) 实现接口: ITcpAgent / IComplexHttpRequester
3) 监听器接口: IHttpAgentListener
3、新增 HTTP Client 组件:
1) 组件类: CHttpClient、CHttpsClient
2) 实现接口: ITcpClient / IHttpRequester
3) 监听器接口: IHttpClientListener
4、新增 HTTP 示例 Demo
1) TestEcho-Http (源代码)
2) TestEcho-Http-4C 4C LIB / 4C DLL
5、Http 监听器:
1) 监听器事件:
OnMessageBegin() : 【可选】开始解析
OnRequestLine() : 【可选】请求行解析完成(仅用于 HTTP 服务端)
OnStatusLine() : 【可选】状态行解析完成(仅用于 HTTP 客户端)
OnHeader() : 【可选】请求头通知
OnHeadersComplete() : 【必须】请求头完成通知
OnBody() : 【必须】请求体报文通知
OnChunkHeader() : 【可选】Chunked 报文头通知
OnChunkComplete() : 【可选】Chunked 报文结束通知
OnMessageComplete() : 【必须】完成解析通知
OnUpgrade() : 【可选】升级协议通知
OnParseError() : 【必须】解析错误通知
2) 监听器事件返回值EnHttpParseResult
HPR_OK : 继续解析
HPR_SKIP_BODY : 跳过当前请求 BODY仅用于 OnHeadersComplete 事件)
HPR_UPGRADE : 升级协议(仅用于 OnHeadersComplete 事件)
HPR_ERROR : 终止解析,断开连接
> 组件接口调整:
-----------------
1、IServer 和 IAgent 组件的所有监听器回调方法增加事件源参数OnShutdown() -> OnShutdown(T* pSender)
2、IClient 组件的所有监听器回调方法增加连接ID参数OnHandShake(IClient* pClient) -> OnHandShake(T* pSender, CONNID dwConnID)
3、IServer 和 IAgent 接口增加接口方法: Get/SetMaxConnectionCount() 用于设置最大连接数最大连接数默认10000
4、OnHandShake() 事件触发规则调整:非 SSL 组件在 OnConnect() 事件后也触发 OnHandShake() 事件,使 SSL 组件和 SSL 组件处理流程一致
5、HPSocket4C 增加 PACK 组件监听器的创建、销毁方法,新版本必须使用下列方法创建、销毁 PACK 组件监听器:
1) Create_HP_TcpPackServerListener / Destroy_HP_TcpPackServerListener
2) Create_HP_TcpPackAgentListener / Destroy_HP_TcpPackAgentListener
3) Create_HP_TcpPackClientListener / Destroy_HP_TcpPackClientListener
6、SSL 组件支持 SNI
1) SSL 初始化方法 HP_SSL_Initialize(),增加 SNI 回调函数指针参数
2) 新增方法 HP_SSL_AddServerContext(),用于 加载 SNI 主机证书
> 其他更新:
-----------------
1、IServer 和 IAgent 组件采用 Ring Pool 取代 R/W Lock + Map 维护活动连接,提升读写和并发性能
2、更新所有 Demo 示例代码
> 升级说明:
-----------------
1、HP-Socket v4.0.1 与 HP-Socket v3.5.4 接口不兼容
2、IServer、IAgent 和 IClient 的所有监听器回调方法参数都有变化
3、注意HPSocket4C 用新方法创建和销毁 PACK 组件监听器
4、注意IServer 和 IAgent 应用程序需要根据实际使用场景设置最大连接数
==========================================================================================
v3.5.4 更新:
==========================================================================================
> Bug 修复:
-----------------
1、修复 IClient 组件在连接发送数据时连接被断开可能导致程序崩溃 Bug
2、优化 vc-common-src 公共代码包的 CCASQueue
> 升级说明:
-----------------
1、HP-Socket v3.5.4 完全兼容 HP-Socket v3.5.3 版本,可以直接替换升级
==========================================================================================
v3.5.3 更新:
==========================================================================================
> Bug 修复:
-----------------
1、修复 IClient 组件在极端情况下触发两次 OnClose() 事件 Bug
2、修复 IClient 组件在极端情况下销毁 IClient 对象导致程序崩溃 Bug
> 升级说明:
-----------------
1、HP-Socket v3.5.3 完全兼容 HP-Socket v3.5.2 版本,可以直接替换升级
==========================================================================================
v3.5.2 更新:
==========================================================================================
> 组件接口调整:
-----------------
1、IClient 组件 Start() 方法默认连接方式改为异步连接
2、IClient 组件 Start() 方法增加可选参数 lpszBindAddress设置绑定地址
3、HP-Socket 4C 增加导出方法 HP_Client_StartWithBindAddress() 方法,可设置绑定地址
4、IUdpCast 组件删除接口方法 Get/SetBindAddress()
5、IServer 接口 增加 GetLocalAddress() 方法用于获取连接的本地地址信息
6、增加全局函数 SYS_GetSocketLocalAddress() 和 SYS_GetSocketRemoteAddress() 分别用于获取 SOCKET 本地和远程地址信息
> 升级说明:
-----------------
1、HP-Socket v3.5.2 完全兼容 HP-Socket v3.5.1 版本,可以直接替换升级
==========================================================================================
v3.5.1 更新:
==========================================================================================
> 增加 SSL 系列通信组件:
-----------------
1、新增 SSL PUSH 组件CSSLServer、CSSLAgent、CSSLClient
2、新增 SSL PULL 组件CSSLPullServer、CSSLPullAgent、CSSLPullClient
3、新增 SSL PACK 组件CSSLPackServer、CSSLPackAgent、CSSLPackClient
4、SSL Server 实现 ITcpServer 接口SSL Agent 实现 ITcpAgent 接口SSL Client 实现 ITcpClient 接口
5、启动 SSL 通信组件前需要调用 HP_SSL_Initialize() 函数初始化 SSL 全局环境参数
6、通信结束后调用 HP_SSL_Cleanup() 函数清理 SSL 全局运行环境
7、新增 SSL 相关示例 Demo
1) TestEcho-SSL (源代码)
2) TestEcho-SSL-Pack DLL / 4C DLL
3) TestEcho-SSL-4C 4C LIB
4) TestEcho-SSL-PFM LIB
> 组件接口调整:
-----------------
1、ITcpServerListener 接口增加 SSL 握手成功事件OnHandShake(CONNID dwConnID)
2、ITcpAgentListener 接口增加 SSL 握手成功事件OnHandShake(CONNID dwConnID)
3、ITcpClientListener 接口增加 SSL 握手成功事件OnHandShake(IClient* pClient)
4、枚举类型 EnSocketError 增加SSL 环境未就绪’错误代码 SE_SSL_ENV_NOT_READY
5、增加枚举类型EnSSLSessionModeSSL 工作模式EnSSLVerifyModeSSL 验证模式)
6、HPSocket-SSL DLL 主要头文件SocketInterface-SSL.hHPSocket-SSL.h
7、HPSocket4C-SSL DLL 主要头文件HPSocket4C-SSL.h
8、Tcp Pack 系列组件可设置的最大包长调整为 4194303/0x3FFFFF 字节
9、Tcp Pack 系列组件的有效包头标识取值范围调整为 0 ~ 1023/0x3FF
> 增加静态库工程:
-----------------
1、新增项目工程 HPSocketLIB 和 HPSocketLIB4C 用于编译 HPSocket 和 HPSocket4C 静态库
2、静态库与动态库的使用方式一致请参考示例 DemoTestEcho-SSL-4C 和 TestEcho-SSL-PFM
3、使用 HPSocket 或 HPSocket4C 静态库时,需要在工程属性中定义预处理宏 -> HPSOCKET_STATIC_LIB
4、静态库目标文件不包含在发布包中因为太大如果需要请自行编译
> 升级说明:
-----------------
1、HP-Socket v3.5.1 的非 SSL 版本不能二进制兼容 HP-Socket v3.4.x 版本,升级需重新编译应用程序
2、TCP 组件接口增加了 OnHandShake() 事件,使用 C++ 接口的应用程序需要处理该事件,对于非 SSL 组件则可提供一个空实现
==========================================================================================
v3.4.3 更新:
==========================================================================================
> Bug 修复:
-----------------
1、修复 vc-common-src 公共代码包的 CCASQueue 可能导致无限循环 Bug
> 升级说明:
-----------------
1、HP-Socket v3.4.3 完全兼容 HP-Socket v3.4.2 版本,可以直接替换升级
==========================================================================================
v3.4.2 更新:
==========================================================================================
> Bug 修复:
-----------------
1、修复 TcpPackServer 和 TcpPackAgent 某些属性设置不生效 Bug
> 升级说明:
-----------------
1、HP-Socket v3.4.2 完全兼容 HP-Socket v3.4.1 版本,可以直接替换升级
==========================================================================================
v3.4.1 更新:
==========================================================================================
> 增加 Tcp Pack 系列通信组件:
-----------------
1、Tcp Pack 系列组件保证每个 OnReceive 事件都向应用程序提供一个完整数据包
2、Tcp Pack 系列组件是 PUSH/PULL 模式的结合体应用程序不必处理分包PUSH与数据抓取PULL
3、Tcp Pack 系列组件提供 Get/SetMaxPackSize() 和 Get/SetPackHeaderFlag() 方法,用来设置最大包长和包头标识
2、CTcpPackServer 实现 ITcpServer 接口CTcpPackAgent 实现 ITcpAgent 接口CTcpPackClient 实现 ITcpClient 接口
> 组件接口调整:
-----------------
1、OnClose/OnError 合并为一个通信事件: OnClose(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
2、枚举类型 EnSocketOperation 增加一个枚举值: SO_CLOSE = 5标识关闭 Socket 操作
3、IServer 和 IAgent 接口删除接口方法: Get/SetRecvPolicy()
4、IServer 和 IAgent 接口删除接口方法: Get/SetMaxShutdownWaitTime()
> 升级说明:
-----------------
1、HP-Socket v3.3.2 及之前版本升级到 HP-Socket v3.4.1 版本,需要修改 OnClose/OnError 事件的处理代码
==========================================================================================
v3.3.2 更新:
==========================================================================================
> 代码调整:
-----------------
1、增强编译兼容性
2、修复 C#、E 语言 SDK 的已知 Bug
> 升级说明:
-----------------
1、HP-Socket v3.3.2 完全兼容 HP-Socket v3.3.1 版本,可以直接替换升级
==========================================================================================
v3.3.1 更新:
==========================================================================================
> 组件接口调整:
-----------------
1、IClientListener 监听器接口用 IClient* 参数取代 CONNID 参数标识 Client 组件对象
2、增加 IPullClient 接口,用作 PULL Client 组件的基接口
3、IPullSocket 和 IPullClient 接口增加 Peek() 方法用于窥探缓冲区数据(不会移除缓冲区数据)
4、增加 IComplexSocketListener 监听器接口,用作 Server/Agent 组件的监听器基接口
5、IComplexSocketListener 提供 OnShutdown 通知方法取代 Server/Agent 组件原来的 OnServerShutdown/OnAgentShutdown
6、IClient 组件增加 Get/SetExtra() 方法用于保存自定义附加数据
7、IServer 和 IAgent 组件增加“静默连接处理”相关方法:
1) DisconnectSilenceConnections():断开超过指定时长的静默连接
2) GetSilencePeriod():获取某个连接静默时间(毫秒)
3) SetMarkSilence():设置是否标记静默时间(设置为 TRUE 时 DisconnectSilenceConnections() 和 GetSilencePeriod() 才有效默认FALSE
4) IsMarkSilence():检测是否标记静默时间
> 增加 UdpCast 通信组件:
-----------------
1、UdpClient / UdpServer 用于 C/S 模式的点对点单播通信,但在某些应用场景下,需要用到组播或广播通信
2、UdpCast 实现了组播或广播通信UdpCast 提供 IUdpCast 接口,该接口继承自 IClient有以下接口方法
1) 通知接口方法:
OnPrepareConnect(IClient* pClient, SOCKET socket)
OnConnect(IClient* pClient)
OnSend(IClient* pClient, const BYTE* pData, int iLength)
OnReceive(IClient* pClient, const BYTE* pData, int iLength)
OnClose(IClient* pClient)
OnError(IClient* pClient, EnSocketOperation enOperation, int iErrorCode)
2) 主要操作方法:
Start(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE /*该参数被忽略*/)
Stop()
Connect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)
Send(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0)
SendPackets(const WSABUF pBuffers[], int iCount)
3、增加 UdpCast 使用示例TestUDPCast
> 升级说明:
-----------------
1、HP-Socket v3.3.1 在功能上兼容 HP-Socket v3.2.3 版本,但代码级别不完全兼容
2、HP-Socket v3.2.3 升级到 HP-Socket v3.3.1 需要注意以下调整:
1) Client 组件
a) IClientListener 监听器接口调整,所有通知方法的参数有调整
b) PULL Client 用 IPullClient 作为基接口Fetch()/Peek()方法参数有调整
2) Agent/Server 组件
a) OnShutdown 取代 OnServerShutdown/OnAgentShutdown
==========================================================================================
v3.2.3 更新:
==========================================================================================
> common-src 优化:
-----------------
1、优化通信组件的同步机制
2、整体性能提升约 10%
> 升级说明:
-----------------
1、使用 HP-Socket v3.2.2 及以前版本的应用程序可以安全升级到 HP-Socket v3.2.3
==========================================================================================
v3.2.2 更新:
==========================================================================================
> 增加若干帮助方法:
-----------------
1、批量发送方法 SendPackets()
1) IClient / IServer / IAgent 增加批量发送方法 SendPackets(dwConnID, pBuffers[], iBufferCount)
2) 对于 TCP 组件 - 顺序发送所有数据包
3) 对于 UDP 组件 - 把所有数据包组合成一个数据包发送(数据包的总长度不能大于设置的 UDP 包最大长度)
2、小文件发送方法 SendSmallFile()
1) ITcpClient / ITcpServer / ITcpAgent 增加小文件发送方法 SendSmallFile(dwConnID, lpszFileName, pHead, pTail)
2) 通过 pHead 和 pTail 参数,可以分别在文件数据的头部和尾部加入自定义数据
3) SendSmallFile() 只能发送 4096 KB 以内大小的文件
3、HPSocket.dll 和 HPSocket4C.dll 增加以下导出方法
1) SYS_WSAGetLastError():调用系统的 WSAGetLastError()
2) SYS_SetSocketOption():调用系统的 setsockopt()
3) SYS_GetSocketOption():调用系统的 getsockopt()
4) SYS_IoctlSocket() :调用系统的 ioctlsocket()
5) SYS_WSAIoctl() :调用系统的 WSAIoctl()
> 升级说明:
-----------------
1、使用 HP-Socket v3.2.1 及以前版本的应用程序可以安全升级到 HP-Socket v3.2.2
==========================================================================================
v3.2.1 更新:
==========================================================================================
> 增加 TcpAgent / TcpPullAgent 通信组件:
-----------------
1、对于代理服务器或中转服务器等应用场景服务器自身也作为客户端向其它服务器发起大规模连接
2、TcpClient / TcpPullClient 基于 Event Select 通信模型,每个组件对象管理一个 Socket并开启一个线程不适合上述应用场景
3、TcpAgent / TcpPullAgent 基于 IOCP 通信模型,一个组件对象管理多个 Socket适合用作代理服务器或中转服务器的客户端通信组件
4、TcpAgent / TcpPullAgent 的使用方式依然简单,提供以下接口方法:
1) 通知接口方法:
OnPrepareConnect(CONNID dwConnID, SOCKET socket)
OnConnect(CONNID dwConnID)
OnSend(CONNID dwConnID, const BYTE* pData, int iLength)
OnReceive(CONNID dwConnID, const BYTE* pData, int iLength) //Push 模型)
OnReceive(CONNID dwConnID, int iLength) //Pull 模型)
OnClose(CONNID dwConnID)
OnError(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
OnAgentShutdown()
2) 主要操作方法:
Start(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE)
Stop()
Connect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)
Send(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0)
Disconnect(CONNID dwConnID, BOOL bForce = TRUE)
Fetch(CONNID dwConnID, BYTE* pData, int iLength) //Pull 模型)
5、增加 TcpAgent / TcpPullAgent 使用示例:
1) Agent-PFM
2) Agent-Pull
3) Agent-4C
6、增加 TcpAgent + TcpServer 实现的 HTTP 代理服务器示例HttpProxy
> 增加 HPSocket for Java SDK
-----------------
1、提供 Java 开发包hpsocket-3.2.1.jar通过 JNA 实现,目前只支持 Windows 平台)
2、运行环境JDK 1.6+JVM 运行在 server 模式("java -server",在 client 模式下性能受影响)
3、增加示例工程 TestEcho-4J展示 HPSocket4J 的使用方法(包括 PULL 模型示例和性能测试示例)
4、MBCS 和 Unicode 版本分布位于包 org.jessma.hpsocket.mbcs 和 org.jessma.hpsocket.unicode
5、HPSocket for Java SDK 提供以下通信组件:
1) TcpServerTCP 通信服务端组件,支持 PUSH/PULL 模型
2) TcpClientTCP 通信客户端组件,支持 PUSH/PULL 模型
3) TcpAgent TCP 通信 Agent 组件,支持 PUSH/PULL 模型
4) UdpServerUDP 通信服务端组件,支持 PUSH 模型
5) UdpClientUDP 通信客户端组件,支持 PUSH 模型
6、HPSocket4J 的使用方法(以 TcpAgent 为例):
/* 0: 应用程序加入 hpsocket-3.2.1.jar 和 jna-4.1.0.jar */
/* 1: 创建通信组件对象 */
TcpAgent agent = TcpAgent.create(Mode.PUSH);
/* 2: 设置回调函数对象 */
// (可选)
agent.setCallBackOnPrepareConnect(new OnPrepareConnectImpl());
// (可选)
agent.setCallBackOnConnect(new OnConnectImpl());
// 必须PUSH 模型需要设置 OnReceive 回调函数对象
agent.setCallBackOnReceive(new OnReceiveImpl());
// 必须PULL 模型需要设置 OnPullReceive 回调函数对象
// agent.setCallBackOnPullReceive(new OnPullReceiveImpl());
// (可选)
agent.setCallBackOnSend(new OnSendImpl());
// (必须)
agent.setCallBackOnClose(new OnCloseImpl());
// (必须)
agent.setCallBackOnError(new OnErrorImpl());
// (可选)
agent.setCallBackOnAgentShutdown(new OnAgentShutdownImpl());
/* 3启动通信组件 */
agent.start("127.0.0.1", false);
/* 4连接服务器 */
agent.connect("localhost", (short)5555, pdwConnID);
/* 5处理通信数据 */
// 响应 OnReceive / OnPullReceive 事件接收数据
// 使用 agent.send(dwConnID, data, data.length) 发送数据
/* 6关闭通信组件 */
agent.stop();
/* 7销毁通信组件 */
TcpAgent.destroy(agent);
> 优化数据发送/接收策略:
-----------------
1、Server 和 Agent 组件提供以下三种数据发送策略:
1PACK - 打包模式(默认) :尽量把多个发送操作的数据组合在一起发送,增加传输效率
2SAFE - 安全模式 :尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出
3DIRECT - 直接模式 :对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合
2、Server 和 Agent 组件提供以下两种数据接收策略:
1SERIAL - 串行模式(默认):顺序触发同一连接的 OnReceive 和 OnClose/OnError 事件
2PARALLEL - 并行模式 :在不同的通信线程中同时触发同一连接的 OnReceive 和 OnClose/OnError 事件
> 其它更新:
-----------------
1、IServer 的 GetClientAddress() 方法改名为 GetRemoteAddress()
2、IClient 的 Send() 方法删除 “CONNID dwConnID” 参数
3、IClient/IServer/IAgent 的 Send() 方法增加发送数据缓冲区指针偏移量参数 “int iOffset”
4、增加 EnSendPolicy 枚举类型IServer/IAgent 增加发送模式设置方法 SetSendPolicy()
5、增加 EnRecvPolicy 枚举类型IServer/IAgent 增加接收模式设置方法 SetRecvPolicy()
6、IServer/IAgent 增加方法BOOL GetAllConnectionIDs(),获取所有连接的 CONNID
7、IUdpServer 增加方法SetPostReceiveCount(),设置 Receive 预投递数量
8、EnServerError / EnClientError 枚举类型合并为 EnSocketError
9、EnSocketError / EnHandleResult / EnFetchResult 枚举类型从原所在类中移到外部
10、IClient/IServer/IAgent 增加方法BOOL GetPendingDataLength(),获取连接中未发出数据的长度
11、HPSocket4C.dll 增加方法 SendPart(),支持指定缓冲区指针偏移量
12、增加 HPSocket for C# SDK由 int 2e 提供)
13、增加 HPSocket 易语言支持库(由 Yecate 提供)
14、公共代码包 vc-common-src 更新为 v2.3.5参考vc-common-src v2.3.5 的 Change Log
> 升级说明:
-----------------
1、HP-Socket v3.2.1 在功能上兼容 HP-Socket v3.1.3 及以前版本
2、接口有变化需要根据提示修改程序代码注意现有程序不能直接替换 v3.1.3 的 DLL
3、EnServerError / EnClientError 枚举类型合并为 EnSocketError注意一些枚举值发生了变化
==========================================================================================
v3.1.3 更新:
==========================================================================================
> 增加其它语言 Demo
-----------------
1、C#
2、Delphi
3、E 语言
> Bug Fix
-----------------
1、修复 IP 地址判断错误 Bug
1) 客户端组件连接服务器时,如果服务器 IP 地址满位12个数字AAA.BBB.CCC.DDD则被错误地判断为域名
2) 影响组件:所有 TCP/UDP 客户端组件
3) 影响版本v3.1.2 及之前所有版本
2、修复域名或主机名的 IP 地址解析错误 Bug
1) 客户端组件通过域名或主机名连接服务器时,可能会解析到错误的 IP 地址
2) 影响组件:所有 TCP/UDP 客户端组件
3) 影响版本v3.1.2 及之前所有版本
> 升级说明:
-----------------
1、使用 HP-Socket v3.1.2 及以前版本的应用程序可以安全升级到 HP-Socket v3.1.3
==========================================================================================
v3.1.2 更新:
==========================================================================================
> 修改 Server 组件的 OnClose() / OnError() 事件的触发规则:
-----------------
1、以前版本的 TCP/UDP Server 组件中,当关闭一个连接时可能会同时触发一个 OnClose() 事件和若干个 OnError() 事件
2. 由于存在上述可能性,所以应用程序需要对 OnClose() / OnError() 的处理事件代码段进行同步
3、从 v3.1.2 开始,当多个 OnClose() / OnError() 事件同时发生时,组件只会向应用程序通知第一个事件,后续事件则忽略
4. 因此,应用程序在处理 OnClose() / OnError() 事件时不必处理同步,减少了出错的可能和编写同步及检测代码的负担
示例代码一:
--------------------------------------------------------------------------------------
ISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)
{
// 以前版本:有可能存在并发的 OnClose()/OnError(),要把代码放在临界区中并检测返回值
CCriSecLock locallock(m_csPkgInfo); // <-- 临界区
PVOID pInfo = nullptr;
if(m_Server->GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr) // <-- 检测返回值
{
m_Server->SetConnectionExtra(dwConnID, nullptr);
delete pInfo;
}
}
示例代码二:
--------------------------------------------------------------------------------------
ISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)
{
// v3.1.2 版本:只会接收到一个 OnClose()/OnError() 事件,能安全地移除临界区代码和检测代码
PVOID pInfo = nullptr;
m_Server->GetConnectionExtra(dwConnID, &pInfo);
ASSERT(pInfo != nullptr);
delete pInfo;
}
> 其它更新:
-----------------
1、调整 TCP Server 默认参数:
1) DEFAULT_SOCKET_LISTEN_QUEUE : 300
2) DEFAULT_ACCEPT_SOCKET_COUNT : 300
3) DEFAULT_FREE_SOCKETOBJ_POOL : 150
4) DEFAULT_FREE_SOCKETOBJ_HOLD : 450
5) DEFAULT_FREE_BUFFEROBJ_POOL : 300
6) DEFAULT_FREE_BUFFEROBJ_HOLD : 900
2、调整 UDP Server 默认参数:
1) DEFAULT_FREE_SOCKETOBJ_POOL : 150
2) DEFAULT_FREE_SOCKETOBJ_HOLD : 450
3) DEFAULT_FREE_BUFFEROBJ_POOL : 300
4) DEFAULT_FREE_BUFFEROBJ_HOLD : 900
> 升级说明:
-----------------
1、使用 HP-Socket v3.1.1 及以前版本的应用程序可以安全升级到 HP-Socket v3.1.2
==========================================================================================
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、HPSocket4C.dll 动态链接库发行版本
(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、CTcpClient 用 CItemPool 和 TItemList 实现发送缓冲区
4、CUdpClient 用 CItemPool 和 TItemList 实现发送缓冲区
5、CTcpPullClient 用 CItemPool 和 TItemList 实现发送缓冲区和 PULL 缓冲区
6、CTcpPullServer 用 CBufferPool 和 TBuffer 实现 PULL 缓冲区
> 其它更新:
-----------------
1、IServer 增加接口方法 DisconnectLongConnections() 用于断开所有超长连接
2、IServer 删除接口方法 GetConnectionCriSec()
3、IClient 增加方法 Get/SetFreeBufferPoolSize()、Get/SetFreeBufferPoolHold() 用于设置 Buffer Pool 缓存大小和阀值
4、IPullServer 删除方法 Get/SetFreePullBufferPool()、Get/SetFreePullBufferHold()
5、HPSocket.dll 和 HPSocket4C.dll 使用 /MT(d) 选项重新编译,消除对运行时库的依赖
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)
> 其它更新:
-----------------
1、把组件接口以及监听器接口的声明移到 SocketInterface.h
2、IServer 增加接口方法 GetConnectionCount()/GetConnectPeriod() 分别获取当前连接数和某个连接的时长
3、IServer 接口方法 GetListenAddress()/GetClientAddress() 的 CString& 参数改为 LPTSTR
4、IClient 接口方法 GetLocalAddress() 的 CString& 参数改为 LPTSTR
5、SocketHelper.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 对象缓存列表设置了锁定时间,提高访问的安全性
> 升级说明:
-----------------
1、使用 HP-Socket v2.2.3 的应用程序可以安全升级到 HP-Socket v3.0.1
2、由于重命名了大量接口、类以及代码文件因此升级时需要作相应调整
==========================================================================================
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、通过上述两个方法应用程序可以为每个连接绑定任意附加数据并把数据获取出来
> 其它更新:
-----------------
1、放宽 CIocpServer 的最大 IOCP 工作线程数目限制64 改为 500
2、服务端 Socket 组件的 Disconnect() 方法增加一个标识参数bForce指示是否强制断开连接
3、调整连接 ID 的生成规则,避免生成数值为 0 的连接 ID
==========================================================================================
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
> 其他更新:
-----------------
1、增加 PULL Socket 测试程序 TestEcho-Pull
2、在 SocketHelper.h (.cpp) 中添加若干帮助结构体
> 升级说明:
-----------------
1、使用 HP-Socket v2.1.1 的应用程序可以安全升级到 v2.2.1
2、由于 ISocketServer、ISocketClient 和 CSocketClient 的名称已修改,因此,应用程序需要对引用的名称和包含的头文件名作相应修改
==========================================================================================
v2.1.1 更新:
==========================================================================================
> Server
-----------------
1、IServerSocketListener 取消 OnPrepareSocket(connID, socket) 通知方法
2、IServerSocketListener 修改 OnAccept((connID, soClient) 通知方法增加参数soClient用于实现原 OnPrepareSocket(connID, socket) 通知方法的功能
3、IServerSocketListener 增加 OnPrepareListen(soListen) 通知方法,用于设置监听 socket 的 SOCKET 选项
4、ISocketServer 增加方法 GetListenAddress(strAddress, usPort),用于获取监听 Socket 的地址信息
5、ISocketServer 增加方法 GetClientAddress(connID, strAddress, usPort),用于某个客户端连接的地址信息
6、优化 Socket 缓存池和内存块缓存池管理
7、调整一些属性访问方法的方法名
8、修复BUG特殊情形下可能出现死锁现象
> Client
-----------------
1、ISocketServer 增加方法 GetLocalAddress(strAddress, usPort),用于获取 Client Socket 的地址信息
2、优化数据发送方式提升数据发送效率
> 其他更新:
-----------------
1、优化 TestEcho 和 TestEcho-PFM 测试程序
3、在 SocketHelper.h (.cpp) 中添加若干帮助函数
4、为 SocketHelper.h 中定义的所有接口、类和方法加入注释
==========================================================================================
v2.0.1 更新:
==========================================================================================
> Server
-----------------
1、IServerSocketListener 增加 OnPrepareSocket(connID, socket) 通知方法用于在使用 socket 前设置 SOCKET 选项或过滤客户端连接
2、ISocketServer 增加方法 Disconnect(connID) 用于主动断开客户端连接
3、增加 IServerSocketListener 的子类 CServerSocketListener提供默认空的通知处理方法
> Client
-----------------
1、IClientSocketListener 增加 OnPrepareSocket(connID, socket) 通知方法用于在使用 socket 前设置 SOCKET 选项
2、支持异步 ConnectISocketServer 的 Start() 方法增加一个参数 BOOL bAsyncConnect 设置是否采用异步 Connect
3、增加 IClientSocketListener 的子类 CClientSocketListener提供默认空的通知处理方法。
4、修复BUG超高负载情形下出现丢包现象
> 其他更新:
-----------------
1、支持 Windows x64 平台
2、优化 TestEcho 和 TestEcho-PFM 测试程序
3、TestEcho 客户端程序加入“异步连接”示例
4、TestEcho 服务端程序加入“连接过滤”和“主动断开连接”示例