高性能跨平台网络通信框架 HP-Socket v5.4.4 [问题点数:300分,无满意结帖,结帖人Ldcsaa]

Bbs1
本版专家分:55
结帖率 78.57%
Bbs9
本版专家分:55864
Blank
红花 2015年8月 硬件/嵌入开发大版内专家分月排行榜第一
2015年7月 VC/MFC大版内专家分月排行榜第一
2015年5月 VC/MFC大版内专家分月排行榜第一
2015年4月 VC/MFC大版内专家分月排行榜第一
2015年3月 VC/MFC大版内专家分月排行榜第一
2015年1月 硬件/嵌入开发大版内专家分月排行榜第一
2013年12月 VC/MFC大版内专家分月排行榜第一
2013年11月 VC/MFC大版内专家分月排行榜第一
2013年6月 VB大版内专家分月排行榜第一
2013年5月 VB大版内专家分月排行榜第一
2013年1月 VB大版内专家分月排行榜第一
2012年12月 VB大版内专家分月排行榜第一
Blank
黄花 2015年9月 VC/MFC大版内专家分月排行榜第二
2015年7月 硬件/嵌入开发大版内专家分月排行榜第二
2014年5月 VC/MFC大版内专家分月排行榜第二
2014年3月 VC/MFC大版内专家分月排行榜第二
2013年10月 VB大版内专家分月排行榜第二
2013年7月 VB大版内专家分月排行榜第二
2012年5月 VB大版内专家分月排行榜第二
2012年4月 VB大版内专家分月排行榜第二
2012年2月 VB大版内专家分月排行榜第二
2011年11月 VB大版内专家分月排行榜第二
Blank
蓝花 2015年11月 VC/MFC大版内专家分月排行榜第三
2015年6月 VC/MFC大版内专家分月排行榜第三
2015年2月 VC/MFC大版内专家分月排行榜第三
2014年1月 VC/MFC大版内专家分月排行榜第三
2012年3月 VB大版内专家分月排行榜第三
2011年12月 VB大版内专家分月排行榜第三
2011年10月 VB大版内专家分月排行榜第三
Bbs1
本版专家分:0
Bbs1
本版专家分:55
Bbs10
本版专家分:137441
Blank
进士 2018年总版新获得的技术专家分排名前十
Blank
银牌 2019年7月 总版技术专家分月排行榜第二
2019年5月 总版技术专家分月排行榜第二
Blank
铜牌 2019年4月 总版技术专家分月排行榜第三
2019年3月 总版技术专家分月排行榜第三
Blank
红花 2019年7月 VC/MFC大版内专家分月排行榜第一
2019年6月 VC/MFC大版内专家分月排行榜第一
2019年5月 VC/MFC大版内专家分月排行榜第一
2019年4月 VC/MFC大版内专家分月排行榜第一
2019年3月 VC/MFC大版内专家分月排行榜第一
2019年1月 VC/MFC大版内专家分月排行榜第一
2018年12月 VC/MFC大版内专家分月排行榜第一
2018年11月 VC/MFC大版内专家分月排行榜第一
2018年10月 VC/MFC大版内专家分月排行榜第一
2018年9月 VC/MFC大版内专家分月排行榜第一
2018年8月 VC/MFC大版内专家分月排行榜第一
2018年5月 VC/MFC大版内专家分月排行榜第一
2018年4月 VC/MFC大版内专家分月排行榜第一
2018年3月 VC/MFC大版内专家分月排行榜第一
2018年2月 VC/MFC大版内专家分月排行榜第一
2018年1月 VC/MFC大版内专家分月排行榜第一
2017年12月 VC/MFC大版内专家分月排行榜第一
2017年11月 VC/MFC大版内专家分月排行榜第一
2017年7月 VC/MFC大版内专家分月排行榜第一
2012年7月 VC/MFC大版内专家分月排行榜第一
Bbs7
本版专家分:14700
Bbs1
本版专家分:55
Bbs1
本版专家分:55
HP-Socket网络通信框架开发指南
经典socket开发框架
HP-Socket网络通信框架开发指南5.0版
HP-Socket<em>网络</em><em>通信框架</em>开发指南5.0版.详细的说明。。。
HP-Socket网络通信框架开发指南.zip
HP-Socket 是一套通用的<em>高性能</em> TCP/UDP/HTTP <em>通信框架</em>,包含服务端组件、 客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通 信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。 HP-Socket 对通信层完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。 为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思 想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、PACK 模型示例、性能测试示例以及其它编程语言示例)。
高性能 TCP & UDP 通信框架 HP-Socket v4.1.3
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP/HTTP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/<em>hp-socket</em>/doc[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn   3、HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。rnrn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.1.3 更新 ***[/color][/size][/b]rnrn[b][i]> WebSocket 支持:[/i][/b]rn----------------- rn 1、所有 HTTP 组件增加 WebSocket 方法:rn 1) SendWSMessage(): 发送 WebSocket 数据包rn 2) GetWSMessageState(): 获取当前 WebSocket 状态rn 2、所有 HTTP 组件监听器增加 WebSocket 事件:rn 1) OnWSMessageHeader(): WebSocket 数据包头通知rn 2) OnWSMessageBody(): WebSocket 数据包体通知rn 3) OnWSMessageComplete(): WebSocket 数据包完成通知rn 3、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 支持 WebSocketrnrn[b][i]> 增加 HTTP Sync Client 通信组件:[/i][/b]rn-----------------rn 1、HTTP Sync Client 实现同步 HTTP 通信,不需要事件监听器rn 2、HTTP Sync Client 组件类: CHttpSyncClient、CHttpsSyncClientrn 3、HTTP Sync Client 实现接口: ITcpClient / IHttpSyncRequesterrn 4、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 提供 HTTP Sync Client 示例rnrn[b][i]> 其它更新:[/i][/b]rn-----------------rn 1、采用新环形缓冲区算法提高异步操作安全性rn 2、采用延时释放策略提高 HTTP 异步操作安全性rn 3、IClient 组件优化,提高稳定性rn 4、修正 ITcpServer 和 ITcpAgent 组件的 Onclose 事件在 SP_DIRECT 发送模式下的触发规则rnrn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.0.1 更新 ***[/color][/size][/b]rnrn[b][i]> 增加 HTTP 系列通信组件:[/i][/b]rn----------------- rn[img=https://img-bbs.csdn.net/upload/201610/08/1475857393_73495.png][/img]rn[img=https://img-bbs.csdn.net/upload/201610/08/1475857418_443165.png][/img]rn 1、新增 HTTP Server 组件:rn 1) 组件类: CHttpServer、CHttpsServerrn 2) 实现接口: ITcpServer / IComplexHttpResponderrn 3) 监听器接口: IHttpServerListenerrn 2、新增 HTTP Agent 组件:rn 1) 组件类: CHttpAgent、CHttpsAgentrn 2) 实现接口: ITcpAgent / IComplexHttpRequesterrn 3) 监听器接口: IHttpAgentListenerrn 3、新增 HTTP Client 组件:rn 1) 组件类: CHttpClient、CHttpsClientrn 2) 实现接口: ITcpClient / IHttpRequesterrn 3) 监听器接口: IHttpClientListenerrn 4、新增 HTTP 示例 Demo:rn 1) TestEcho-Http (源代码)rn 2) TestEcho-Http-4C (4C LIB / 4C DLL)rn 5、Http 监听器:rn 1) 监听器事件:[code=text]OnMessageBegin() : 【可选】开始解析rnOnRequestLine() : 【可选】请求行解析完成(仅用于 HTTP 服务端)rnOnStatusLine() : 【可选】状态行解析完成(仅用于 HTTP 客户端)rnOnHeader() : 【可选】请求头通知rnOnHeadersComplete() : 【必须】请求头完成通知rnOnBody() : 【必须】请求体报文通知rnOnChunkHeader() : 【可选】Chunked 报文头通知rnOnChunkComplete() : 【可选】Chunked 报文结束通知rnOnMessageComplete() : 【必须】完成解析通知rnOnUpgrade() : 【可选】升级协议通知rnOnParseError() : 【必须】解析错误通知[/code] 2) 监听器事件返回值(EnHttpParseResult):rn[code=text]HPR_OK : 继续解析rnHPR_SKIP_BODY : 跳过当前请求 BODY(仅用于 OnHeadersComplete 事件)rnHPR_UPGRADE : 升级协议(仅用于 OnHeadersComplete 事件)rnHPR_ERROR : 终止解析,断开连接[/code][b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、IServer 和 IAgent 组件的所有监听器回调方法增加‘事件源’参数,如:OnShutdown() -> OnShutdown(T* pSender)rn 2、IClient 组件的所有监听器回调方法增加‘连接ID’参数,如:OnHandShake(IClient* pClient) -> OnHandShake(T* pSender, CONNID dwConnID)rn 3、IServer 和 IAgent 接口增加接口方法: Get/SetMaxConnectionCount() 用于设置最大连接数,最大连接数默认:10000rn 4、OnHandShake() 事件触发规则调整:非 SSL 组件在 OnConnect() 事件后也触发 OnHandShake() 事件,使 SSL 组件和 SSL 组件处理流程一致rn 5、HPSocket4C 增加 PACK 组件监听器的创建、销毁方法,新版本必须使用下列方法创建、销毁 PACK 组件监听器:rn 1) Create_HP_TcpPackServerListener / Destroy_HP_TcpPackServerListenerrn 2) Create_HP_TcpPackAgentListener / Destroy_HP_TcpPackAgentListenerrn 3) Create_HP_TcpPackClientListener / Destroy_HP_TcpPackClientListenerrn 6、SSL 组件支持 SNIrn 1) SSL 初始化方法 HP_SSL_Initialize(),增加 SNI 回调函数指针参数rn 2) 新增方法 HP_SSL_AddServerContext(),用于 加载 SNI 主机证书rnrn[b][i]> 其他更新:[/i][/b]rn-----------------rn 1、IServer 和 IAgent 组件采用 Ring Pool 取代 R/W Lock + Map 维护活动连接,提升读写和并发性能rn 2、更新所有 Demo 示例代码rnrn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.5.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 SSL 系列通信组件:[/i][/b]rn-----------------rn 1、新增 SSL PUSH 组件:CSSLServer、CSSLAgent、CSSLClientrn 2、新增 SSL PULL 组件:CSSLPullServer、CSSLPullAgent、CSSLPullClientrn 3、新增 SSL PACK 组件:CSSLPackServer、CSSLPackAgent、CSSLPackClientrn 4、SSL Server 实现 ITcpServer 接口,SSL Agent 实现 ITcpAgent 接口,SSL Client 实现 ITcpClient 接口rn 5、启动 SSL 通信组件前需要调用 HP_SSL_Initialize() 函数初始化 SSL 全局环境参数rn 6、通信结束后调用 HP_SSL_Cleanup() 函数清理 SSL 全局运行环境rn 7、新增 SSL 相关示例 Demo:rn 1) TestEcho-SSL (源代码)rn 2) TestEcho-SSL-Pack (DLL / 4C DLL)rn 3) TestEcho-SSL-4C (4C LIB)rn 4) TestEcho-SSL-PFM (LIB)rn[img=https://img-bbs.csdn.net/upload/201605/23/1463992712_737233.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、ITcpServerListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 2、ITcpAgentListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 3、ITcpClientListener 接口增加 SSL 握手成功事件:OnHandShake(IClient* pClient)rn 4、枚举类型 EnSocketError 增加‘SSL 环境未就绪’错误代码 SE_SSL_ENV_NOT_READYrn 5、增加枚举类型:EnSSLSessionMode(SSL 工作模式),EnSSLVerifyMode(SSL 验证模式)rn 6、HPSocket-SSL DLL 主要头文件:SocketInterface-SSL.h,HPSocket-SSL.hrn 7、HPSocket4C-SSL DLL 主要头文件:HPSocket4C-SSL.hrn 8、Tcp Pack 系列组件可设置的最大包长调整为 4194303/0x3FFFFF 字节rn 9、Tcp Pack 系列组件的有效包头标识取值范围调整为 0 ~ 1023/0x3FFrnrn[b][i]> 增加静态库工程:[/i][/b]rn-----------------rn 1、新增项目工程 HPSocketLIB 和 HPSocketLIB4C 用于编译 HPSocket 和 HPSocket4C 静态库rn 2、静态库与动态库的使用方式一致(请参考示例 Demo:TestEcho-SSL-4C 和 TestEcho-SSL-PFM)rn 3、使用 HPSocket 或 HPSocket4C 静态库时,需要在工程属性中定义预处理宏 -> HPSOCKET_STATIC_LIBrn 4、静态库目标文件不包含在发布包中(因为太大),如果需要请自行编译rn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v3.4.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 Tcp Pack 系列通信组件:[/i][/b]rn-----------------rn 1、Tcp Pack 系列组件保证每个 OnReceive 事件都向应用程序提供一个完整数据包rn 2、Tcp Pack 系列组件是 PUSH/PULL 模式的结合体,应用程序不必处理分包(如:PUSH)与数据抓取(如:PULL)rn 3、Tcp Pack 系列组件提供 Get/SetMaxPackSize() 和 Get/SetPackHeaderFlag() 方法,用来设置最大包长和包头标识rn 4、CTcpPackServer 实现 ITcpServer 接口,CTcpPackAgent 实现 ITcpAgent 接口,CTcpPackClient 实现 ITcpClient 接口rn[img=https://img-bbs.csdn.net/upload/201603/27/1459080805_239193.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、OnClose/OnError 合并为一个通信事件: OnClose(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rn 2、枚举类型 EnSocketOperation 增加一个枚举值: SO_CLOSE = 5,标识关闭 Socket 操作rn 3、IServer 和 IAgent 接口删除接口方法: Get/SetRecvPolicy()rn 4、IServer 和 IAgent 接口删除接口方法: Get/SetMaxShutdownWaitTime()rn------------------------------------------------------------------------------------------------
高性能 TCP & UDP 通信框架 HP-Socket v3.5.4 发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/<em>hp-socket</em>/doc[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn   3、HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。rnrn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.5.4 更新 ***[/color][/size][/b]rn rn[b][i]> Bug 修复:[/i][/b]rn-----------------rn 1、修复 IClient 组件在连接发送数据时连接被断开可能导致程序崩溃 Bugrn 2、优化 vc-common-src 公共代码包的 CCASQueuern------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.5.3 更新 ***[/color][/size][/b]rn rn[b][i]> Bug 修复:[/i][/b]rn-----------------rn 1、修复 IClient 组件在极端情况下触发两次 OnClose() 事件 Bugrn 2、修复 IClient 组件在极端情况下销毁 IClient 对象导致程序崩溃 Bugrn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v3.5.2 更新 ***[/color][/size][/b]rn rn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、IClient 组件 Start() 方法默认连接方式改为异步连接rn 2、IClient 组件 Start() 方法增加可选参数 lpszBindAddress,设置绑定地址rn 3、HP-Socket 4C 增加导出方法 HP_Client_StartWithBindAddress() 方法,可设置绑定地址rn 4、IUdpCast 组件删除接口方法 Get/SetBindAddress()rn 5、IServer 接口 增加 GetLocalAddress() 方法用于获取连接的本地地址信息rn 6、增加全局函数 SYS_GetSocketLocalAddress() 和 SYS_GetSocketRemoteAddress() 分别用于获取 SOCKET 本地和远程地址信息rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.5.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 SSL 系列通信组件:[/i][/b]rn-----------------rn 1、新增 SSL PUSH 组件:CSSLServer、CSSLAgent、CSSLClientrn 2、新增 SSL PULL 组件:CSSLPullServer、CSSLPullAgent、CSSLPullClientrn 3、新增 SSL PACK 组件:CSSLPackServer、CSSLPackAgent、CSSLPackClientrn 4、SSL Server 实现 ITcpServer 接口,SSL Agent 实现 ITcpAgent 接口,SSL Client 实现 ITcpClient 接口rn 5、启动 SSL 通信组件前需要调用 HP_SSL_Initialize() 函数初始化 SSL 全局环境参数rn 6、通信结束后调用 HP_SSL_Cleanup() 函数清理 SSL 全局运行环境rn 7、新增 SSL 相关示例 Demo:rn 1) TestEcho-SSL (源代码)rn 2) TestEcho-SSL-Pack (DLL / 4C DLL)rn 3) TestEcho-SSL-4C (4C LIB)rn 4) TestEcho-SSL-PFM (LIB)rn[img=https://img-bbs.csdn.net/upload/201605/23/1463992712_737233.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、ITcpServerListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 2、ITcpAgentListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 3、ITcpClientListener 接口增加 SSL 握手成功事件:OnHandShake(IClient* pClient)rn 4、枚举类型 EnSocketError 增加‘SSL 环境未就绪’错误代码 SE_SSL_ENV_NOT_READYrn 5、增加枚举类型:EnSSLSessionMode(SSL 工作模式),EnSSLVerifyMode(SSL 验证模式)rn 6、HPSocket-SSL DLL 主要头文件:SocketInterface-SSL.h,HPSocket-SSL.hrn 7、HPSocket4C-SSL DLL 主要头文件:HPSocket4C-SSL.hrn 8、Tcp Pack 系列组件可设置的最大包长调整为 4194303/0x3FFFFF 字节rn 9、Tcp Pack 系列组件的有效包头标识取值范围调整为 0 ~ 1023/0x3FFrnrn[b][i]> 增加静态库工程:[/i][/b]rn-----------------rn 1、新增项目工程 HPSocketLIB 和 HPSocketLIB4C 用于编译 HPSocket 和 HPSocket4C 静态库rn 2、静态库与动态库的使用方式一致(请参考示例 Demo:TestEcho-SSL-4C 和 TestEcho-SSL-PFM)rn 3、使用 HPSocket 或 HPSocket4C 静态库时,需要在工程属性中定义预处理宏 -> HPSOCKET_STATIC_LIBrn 4、静态库目标文件不包含在发布包中(因为太大),如果需要请自行编译rn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v3.4.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 Tcp Pack 系列通信组件:[/i][/b]rn-----------------rn 1、Tcp Pack 系列组件保证每个 OnReceive 事件都向应用程序提供一个完整数据包rn 2、Tcp Pack 系列组件是 PUSH/PULL 模式的结合体,应用程序不必处理分包(如:PUSH)与数据抓取(如:PULL)rn 3、Tcp Pack 系列组件提供 Get/SetMaxPackSize() 和 Get/SetPackHeaderFlag() 方法,用来设置最大包长和包头标识rn 4、CTcpPackServer 实现 ITcpServer 接口,CTcpPackAgent 实现 ITcpAgent 接口,CTcpPackClient 实现 ITcpClient 接口rn[img=https://img-bbs.csdn.net/upload/201603/27/1459080805_239193.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、OnClose/OnError 合并为一个通信事件: OnClose(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rn 2、枚举类型 EnSocketOperation 增加一个枚举值: SO_CLOSE = 5,标识关闭 Socket 操作rn 3、IServer 和 IAgent 接口删除接口方法: Get/SetRecvPolicy()rn 4、IServer 和 IAgent 接口删除接口方法: Get/SetMaxShutdownWaitTime()rn------------------------------------------------------------------------------------------------
高性能 TCP & UDP 通信框架 HP-Socket v3.5.2 发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/<em>hp-socket</em>/doc[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn   3、HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。rnrn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.5.2 更新 ***[/color][/size][/b]rn rn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、IClient 组件 Start() 方法默认连接方式改为异步连接rn 2、IClient 组件 Start() 方法增加可选参数 lpszBindAddress,设置绑定地址rn 3、HP-Socket 4C 增加导出方法 HP_Client_StartWithBindAddress() 方法,可设置绑定地址rn 4、IUdpCast 组件删除接口方法 Get/SetBindAddress()rn 5、IServer 接口 增加 GetLocalAddress() 方法用于获取连接的本地地址信息rn 6、增加全局函数 SYS_GetSocketLocalAddress() 和 SYS_GetSocketRemoteAddress() 分别用于获取 SOCKET 本地和远程地址信息rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.5.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 SSL 系列通信组件:[/i][/b]rn-----------------rn 1、新增 SSL PUSH 组件:CSSLServer、CSSLAgent、CSSLClientrn 2、新增 SSL PULL 组件:CSSLPullServer、CSSLPullAgent、CSSLPullClientrn 3、新增 SSL PACK 组件:CSSLPackServer、CSSLPackAgent、CSSLPackClientrn 4、SSL Server 实现 ITcpServer 接口,SSL Agent 实现 ITcpAgent 接口,SSL Client 实现 ITcpClient 接口rn 5、启动 SSL 通信组件前需要调用 HP_SSL_Initialize() 函数初始化 SSL 全局环境参数rn 6、通信结束后调用 HP_SSL_Cleanup() 函数清理 SSL 全局运行环境rn 7、新增 SSL 相关示例 Demo:rn 1) TestEcho-SSL (源代码)rn 2) TestEcho-SSL-Pack (DLL / 4C DLL)rn 3) TestEcho-SSL-4C (4C LIB)rn 4) TestEcho-SSL-PFM (LIB)rn[img=https://img-bbs.csdn.net/upload/201605/23/1463992712_737233.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、ITcpServerListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 2、ITcpAgentListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 3、ITcpClientListener 接口增加 SSL 握手成功事件:OnHandShake(IClient* pClient)rn 4、枚举类型 EnSocketError 增加‘SSL 环境未就绪’错误代码 SE_SSL_ENV_NOT_READYrn 5、增加枚举类型:EnSSLSessionMode(SSL 工作模式),EnSSLVerifyMode(SSL 验证模式)rn 6、HPSocket-SSL DLL 主要头文件:SocketInterface-SSL.h,HPSocket-SSL.hrn 7、HPSocket4C-SSL DLL 主要头文件:HPSocket4C-SSL.hrn 8、Tcp Pack 系列组件可设置的最大包长调整为 4194303/0x3FFFFF 字节rn 9、Tcp Pack 系列组件的有效包头标识取值范围调整为 0 ~ 1023/0x3FFrnrn[b][i]> 增加静态库工程:[/i][/b]rn-----------------rn 1、新增项目工程 HPSocketLIB 和 HPSocketLIB4C 用于编译 HPSocket 和 HPSocket4C 静态库rn 2、静态库与动态库的使用方式一致(请参考示例 Demo:TestEcho-SSL-4C 和 TestEcho-SSL-PFM)rn 3、使用 HPSocket 或 HPSocket4C 静态库时,需要在工程属性中定义预处理宏 -> HPSOCKET_STATIC_LIBrn 4、静态库目标文件不包含在发布包中(因为太大),如果需要请自行编译rn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v3.4.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 Tcp Pack 系列通信组件:[/i][/b]rn-----------------rn 1、Tcp Pack 系列组件保证每个 OnReceive 事件都向应用程序提供一个完整数据包rn 2、Tcp Pack 系列组件是 PUSH/PULL 模式的结合体,应用程序不必处理分包(如:PUSH)与数据抓取(如:PULL)rn 3、Tcp Pack 系列组件提供 Get/SetMaxPackSize() 和 Get/SetPackHeaderFlag() 方法,用来设置最大包长和包头标识rn 4、CTcpPackServer 实现 ITcpServer 接口,CTcpPackAgent 实现 ITcpAgent 接口,CTcpPackClient 实现 ITcpClient 接口rn[img=https://img-bbs.csdn.net/upload/201603/27/1459080805_239193.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、OnClose/OnError 合并为一个通信事件: OnClose(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rn 2、枚举类型 EnSocketOperation 增加一个枚举值: SO_CLOSE = 5,标识关闭 Socket 操作rn 3、IServer 和 IAgent 接口删除接口方法: Get/SetRecvPolicy()rn 4、IServer 和 IAgent 接口删除接口方法: Get/SetMaxShutdownWaitTime()rn------------------------------------------------------------------------------------------------
高性能 TCP & UDP 通信框架 HP-Socket v4.2.1
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP/HTTP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=https://github.com/ldcsaa/HP-Socket]https://github.com/ldcsaa/HP-Socket[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/<em>hp-socket</em>/doc[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn   3、HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。rnrn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.2.1 更新 ***[/color][/size][/b]rnrn[b][i]> HTTP Cookie 管理支持:[/i][/b]rn----------------- rn 1、新增 Cookie 管理器,可在不同连接、不同组件对象间共享 Cookiern 2、Cookie 管理器实现了标准 HTTP Cookie 功能,支持 Max-Age、expires、httpOnly、securern 3、Cookie 管理器支持 Cookie 序列化与反序列化rn 4、IHttpClient 和 IHttpAgent 组件可通过 SetUseCookie() 方法设置是否开启 Cookie 功能rn[img=https://img-bbs.csdn.net/upload/201704/20/1492684145_272465.png][/img]rn[b][i]> HTTP Sync Client 通信组件更新:[/i][/b]rn-----------------rn 1、Create_HP_HttpSyncClient 和 Create_HP_HttpsSyncClient 方法增加可选参数 pListenerrn 2、如果 pListener 非空则可以通过 pListener 监听 HttpSyncClient 的所有通信事件rnrn[b][i]> 其它更新:[/i][/b]rn-----------------rn 1、Demo 更新:HttpProxy,TestEcho-Http,TestEcho-Http-4Crn 2、公共代码包 vc-common-src 版本升级到 v2.3.18rn 3、OpenSSL 版本升级到 1.1.0ern------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.1.3 更新 ***[/color][/size][/b]rnrn[b][i]> WebSocket 支持:[/i][/b]rn----------------- rn 1、所有 HTTP 组件增加 WebSocket 方法:rn 1) SendWSMessage(): 发送 WebSocket 数据包rn 2) GetWSMessageState(): 获取当前 WebSocket 状态rn 2、所有 HTTP 组件监听器增加 WebSocket 事件:rn 1) OnWSMessageHeader(): WebSocket 数据包头通知rn 2) OnWSMessageBody(): WebSocket 数据包体通知rn 3) OnWSMessageComplete(): WebSocket 数据包完成通知rn 3、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 支持 WebSocketrnrn[b][i]> 增加 HTTP Sync Client 通信组件:[/i][/b]rn-----------------rn 1、HTTP Sync Client 实现同步 HTTP 通信,不需要事件监听器rn 2、HTTP Sync Client 组件类: CHttpSyncClient、CHttpsSyncClientrn 3、HTTP Sync Client 实现接口: ITcpClient / IHttpSyncRequesterrn 4、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 提供 HTTP Sync Client 示例rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.0.1 更新 ***[/color][/size][/b]rnrn[b][i]> 增加 HTTP 系列通信组件:[/i][/b]rn----------------- rn[img=https://img-bbs.csdn.net/upload/201610/08/1475857393_73495.png][/img]rn[img=https://img-bbs.csdn.net/upload/201610/08/1475857418_443165.png][/img]rn 1、新增 HTTP Server 组件:rn 1) 组件类: CHttpServer、CHttpsServerrn 2) 实现接口: ITcpServer / IComplexHttpResponderrn 3) 监听器接口: IHttpServerListenerrn 2、新增 HTTP Agent 组件:rn 1) 组件类: CHttpAgent、CHttpsAgentrn 2) 实现接口: ITcpAgent / IComplexHttpRequesterrn 3) 监听器接口: IHttpAgentListenerrn 3、新增 HTTP Client 组件:rn 1) 组件类: CHttpClient、CHttpsClientrn 2) 实现接口: ITcpClient / IHttpRequesterrn 3) 监听器接口: IHttpClientListenerrn 4、新增 HTTP 示例 Demo:rn 1) TestEcho-Http (源代码)rn 2) TestEcho-Http-4C (4C LIB / 4C DLL)rn 5、Http 监听器:rn 1) 监听器事件:[code=text]OnMessageBegin() : 【可选】开始解析rnOnRequestLine() : 【可选】请求行解析完成(仅用于 HTTP 服务端)rnOnStatusLine() : 【可选】状态行解析完成(仅用于 HTTP 客户端)rnOnHeader() : 【可选】请求头通知rnOnHeadersComplete() : 【必须】请求头完成通知rnOnBody() : 【必须】请求体报文通知rnOnChunkHeader() : 【可选】Chunked 报文头通知rnOnChunkComplete() : 【可选】Chunked 报文结束通知rnOnMessageComplete() : 【必须】完成解析通知rnOnUpgrade() : 【可选】升级协议通知rnOnParseError() : 【必须】解析错误通知[/code] 2) 监听器事件返回值(EnHttpParseResult):rn[code=text]HPR_OK : 继续解析rnHPR_SKIP_BODY : 跳过当前请求 BODY(仅用于 OnHeadersComplete 事件)rnHPR_UPGRADE : 升级协议(仅用于 OnHeadersComplete 事件)rnHPR_ERROR : 终止解析,断开连接[/code][b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、IServer 和 IAgent 组件的所有监听器回调方法增加‘事件源’参数,如:OnShutdown() -> OnShutdown(T* pSender)rn 2、IClient 组件的所有监听器回调方法增加‘连接ID’参数,如:OnHandShake(IClient* pClient) -> OnHandShake(T* pSender, CONNID dwConnID)rn 3、IServer 和 IAgent 接口增加接口方法: Get/SetMaxConnectionCount() 用于设置最大连接数,最大连接数默认:10000rn 4、OnHandShake() 事件触发规则调整:非 SSL 组件在 OnConnect() 事件后也触发 OnHandShake() 事件,使 SSL 组件和 SSL 组件处理流程一致rn 5、HPSocket4C 增加 PACK 组件监听器的创建、销毁方法,新版本必须使用下列方法创建、销毁 PACK 组件监听器:rn 1) Create_HP_TcpPackServerListener / Destroy_HP_TcpPackServerListenerrn 2) Create_HP_TcpPackAgentListener / Destroy_HP_TcpPackAgentListenerrn 3) Create_HP_TcpPackClientListener / Destroy_HP_TcpPackClientListenerrn 6、SSL 组件支持 SNIrn 1) SSL 初始化方法 HP_SSL_Initialize(),增加 SNI 回调函数指针参数rn 2) 新增方法 HP_SSL_AddServerContext(),用于 加载 SNI 主机证书rn------------------------------------------------------------------------------------------------
高性能 TCP & UDP 通信框架 HP-Socket v4.3.1
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP/HTTP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=https://github.com/ldcsaa/HP-Socket]https://github.com/ldcsaa/HP-Socket[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/<em>hp-socket</em>/doc[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn   3、HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。rnrn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.3.1 更新 ***[/color][/size][/b]rnrn[b][i]> HTTP Cookie 管理支持:[/i][/b]rn----------------- rn 1、IHttpClient 和 IHttpAgent 组件兼容没有长度标识(如:Content-Length Header)的 HTTP 响应报文rn 2、IHttpClient 和 IHttpAgent 组件改进 HEAD 请求的响应处理方式,应用程序无需在 OnHeadersComplete 事件中返回特殊值 HPR_SKIP_BODYrnrn[b][i]> 其它更新:[/i][/b]rn-----------------rn 1、公共代码包 vc-common-src 版本升级到 v2.3.19rn 2、OpenSSL 版本升级到 1.1.0frn 3、优化 IServer/IAgent 组件,提升性能和稳定性rn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v4.2.1 更新 ***[/color][/size][/b]rnrn[b][i]> HTTP Cookie 管理支持:[/i][/b]rn----------------- rn 1、新增 Cookie 管理器,可在不同连接、不同组件对象间共享 Cookiern 2、Cookie 管理器实现了标准 HTTP Cookie 功能,支持 Max-Age、expires、httpOnly、securern 3、Cookie 管理器支持 Cookie 序列化与反序列化rn 4、IHttpClient 和 IHttpAgent 组件可通过 SetUseCookie() 方法设置是否开启 Cookie 功能rn[img=https://img-bbs.csdn.net/upload/201704/20/1492684145_272465.png][/img]rn[b][i]> HTTP Sync Client 通信组件更新:[/i][/b]rn-----------------rn 1、Create_HP_HttpSyncClient 和 Create_HP_HttpsSyncClient 方法增加可选参数 pListenerrn 2、如果 pListener 非空则可以通过 pListener 监听 HttpSyncClient 的所有通信事件rnrn[b][i]> 其它更新:[/i][/b]rn-----------------rn 1、Demo 更新:HttpProxy,TestEcho-Http,TestEcho-Http-4Crn 2、公共代码包 vc-common-src 版本升级到 v2.3.18rn 3、OpenSSL 版本升级到 1.1.0ern------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.1.3 更新 ***[/color][/size][/b]rnrn[b][i]> WebSocket 支持:[/i][/b]rn----------------- rn 1、所有 HTTP 组件增加 WebSocket 方法:rn 1) SendWSMessage(): 发送 WebSocket 数据包rn 2) GetWSMessageState(): 获取当前 WebSocket 状态rn 2、所有 HTTP 组件监听器增加 WebSocket 事件:rn 1) OnWSMessageHeader(): WebSocket 数据包头通知rn 2) OnWSMessageBody(): WebSocket 数据包体通知rn 3) OnWSMessageComplete(): WebSocket 数据包完成通知rn 3、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 支持 WebSocketrnrn[b][i]> 增加 HTTP Sync Client 通信组件:[/i][/b]rn-----------------rn 1、HTTP Sync Client 实现同步 HTTP 通信,不需要事件监听器rn 2、HTTP Sync Client 组件类: CHttpSyncClient、CHttpsSyncClientrn 3、HTTP Sync Client 实现接口: ITcpClient / IHttpSyncRequesterrn 4、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 提供 HTTP Sync Client 示例rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.0.1 更新 ***[/color][/size][/b]rnrn[b][i]> 增加 HTTP 系列通信组件:[/i][/b]rn----------------- rn[img=https://img-bbs.csdn.net/upload/201610/08/1475857393_73495.png][/img]rn[img=https://img-bbs.csdn.net/upload/201610/08/1475857418_443165.png][/img]rn 1、新增 HTTP Server 组件:rn 1) 组件类: CHttpServer、CHttpsServerrn 2) 实现接口: ITcpServer / IComplexHttpResponderrn 3) 监听器接口: IHttpServerListenerrn 2、新增 HTTP Agent 组件:rn 1) 组件类: CHttpAgent、CHttpsAgentrn 2) 实现接口: ITcpAgent / IComplexHttpRequesterrn 3) 监听器接口: IHttpAgentListenerrn 3、新增 HTTP Client 组件:rn 1) 组件类: CHttpClient、CHttpsClientrn 2) 实现接口: ITcpClient / IHttpRequesterrn 3) 监听器接口: IHttpClientListenerrn 4、新增 HTTP 示例 Demo:rn 1) TestEcho-Http (源代码)rn 2) TestEcho-Http-4C (4C LIB / 4C DLL)rn 5、Http 监听器:rn 1) 监听器事件:[code=text]OnMessageBegin() : 【可选】开始解析rnOnRequestLine() : 【可选】请求行解析完成(仅用于 HTTP 服务端)rnOnStatusLine() : 【可选】状态行解析完成(仅用于 HTTP 客户端)rnOnHeader() : 【可选】请求头通知rnOnHeadersComplete() : 【必须】请求头完成通知rnOnBody() : 【必须】请求体报文通知rnOnChunkHeader() : 【可选】Chunked 报文头通知rnOnChunkComplete() : 【可选】Chunked 报文结束通知rnOnMessageComplete() : 【必须】完成解析通知rnOnUpgrade() : 【可选】升级协议通知rnOnParseError() : 【必须】解析错误通知[/code] 2) 监听器事件返回值(EnHttpParseResult):rn[code=text]HPR_OK : 继续解析rnHPR_SKIP_BODY : 跳过当前请求 BODY(仅用于 OnHeadersComplete 事件)rnHPR_UPGRADE : 升级协议(仅用于 OnHeadersComplete 事件)rnHPR_ERROR : 终止解析,断开连接[/code][b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、IServer 和 IAgent 组件的所有监听器回调方法增加‘事件源’参数,如:OnShutdown() -> OnShutdown(T* pSender)rn 2、IClient 组件的所有监听器回调方法增加‘连接ID’参数,如:OnHandShake(IClient* pClient) -> OnHandShake(T* pSender, CONNID dwConnID)rn 3、IServer 和 IAgent 接口增加接口方法: Get/SetMaxConnectionCount() 用于设置最大连接数,最大连接数默认:10000rn 4、OnHandShake() 事件触发规则调整:非 SSL 组件在 OnConnect() 事件后也触发 OnHandShake() 事件,使 SSL 组件和 SSL 组件处理流程一致rn 5、HPSocket4C 增加 PACK 组件监听器的创建、销毁方法,新版本必须使用下列方法创建、销毁 PACK 组件监听器:rn 1) Create_HP_TcpPackServerListener / Destroy_HP_TcpPackServerListenerrn 2) Create_HP_TcpPackAgentListener / Destroy_HP_TcpPackAgentListenerrn 3) Create_HP_TcpPackClientListener / Destroy_HP_TcpPackClientListenerrn 6、SSL 组件支持 SNIrn 1) SSL 初始化方法 HP_SSL_Initialize(),增加 SNI 回调函数指针参数rn 2) 新增方法 HP_SSL_AddServerContext(),用于 加载 SNI 主机证书rn------------------------------------------------------------------------------------------------
高性能 TCP & UDP 通信框架 HP-Socket v3.5.1 发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/<em>hp-socket</em>/doc[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn   3、HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。rnrn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.5.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 SSL 系列通信组件:[/i][/b]rn-----------------rn 1、新增 SSL PUSH 组件:CSSLServer、CSSLAgent、CSSLClientrn 2、新增 SSL PULL 组件:CSSLPullServer、CSSLPullAgent、CSSLPullClientrn 3、新增 SSL PACK 组件:CSSLPackServer、CSSLPackAgent、CSSLPackClientrn 4、SSL Server 实现 ITcpServer 接口,SSL Agent 实现 ITcpAgent 接口,SSL Client 实现 ITcpClient 接口rn 5、启动 SSL 通信组件前需要调用 HP_SSL_Initialize() 函数初始化 SSL 全局环境参数rn 6、通信结束后调用 HP_SSL_Cleanup() 函数清理 SSL 全局运行环境rn 7、新增 SSL 相关示例 Demo:rn 1) TestEcho-SSL (源代码)rn 2) TestEcho-SSL-Pack (DLL / 4C DLL)rn 3) TestEcho-SSL-4C (4C LIB)rn 4) TestEcho-SSL-PFM (LIB)rn[img=https://img-bbs.csdn.net/upload/201605/23/1463992712_737233.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、ITcpServerListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 2、ITcpAgentListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 3、ITcpClientListener 接口增加 SSL 握手成功事件:OnHandShake(IClient* pClient)rn 4、枚举类型 EnSocketError 增加‘SSL 环境未就绪’错误代码 SE_SSL_ENV_NOT_READYrn 5、增加枚举类型:EnSSLSessionMode(SSL 工作模式),EnSSLVerifyMode(SSL 验证模式)rn 6、HPSocket-SSL DLL 主要头文件:SocketInterface-SSL.h,HPSocket-SSL.hrn 7、HPSocket4C-SSL DLL 主要头文件:HPSocket4C-SSL.hrn 8、Tcp Pack 系列组件可设置的最大包长调整为 4194303/0x3FFFFF 字节rn 9、Tcp Pack 系列组件的有效包头标识取值范围调整为 0 ~ 1023/0x3FFrnrn[b][i]> 增加静态库工程:[/i][/b]rn-----------------rn 1、新增项目工程 HPSocketLIB 和 HPSocketLIB4C 用于编译 HPSocket 和 HPSocket4C 静态库rn 2、静态库与动态库的使用方式一致(请参考示例 Demo:TestEcho-SSL-4C 和 TestEcho-SSL-PFM)rn 3、使用 HPSocket 或 HPSocket4C 静态库时,需要在工程属性中定义预处理宏 -> HPSOCKET_STATIC_LIBrn 4、静态库目标文件不包含在发布包中(因为太大),如果需要请自行编译rn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v3.4.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 Tcp Pack 系列通信组件:[/i][/b]rn-----------------rn 1、Tcp Pack 系列组件保证每个 OnReceive 事件都向应用程序提供一个完整数据包rn 2、Tcp Pack 系列组件是 PUSH/PULL 模式的结合体,应用程序不必处理分包(如:PUSH)与数据抓取(如:PULL)rn 3、Tcp Pack 系列组件提供 Get/SetMaxPackSize() 和 Get/SetPackHeaderFlag() 方法,用来设置最大包长和包头标识rn 4、CTcpPackServer 实现 ITcpServer 接口,CTcpPackAgent 实现 ITcpAgent 接口,CTcpPackClient 实现 ITcpClient 接口rn[img=https://img-bbs.csdn.net/upload/201603/27/1459080805_239193.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、OnClose/OnError 合并为一个通信事件: OnClose(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rn 2、枚举类型 EnSocketOperation 增加一个枚举值: SO_CLOSE = 5,标识关闭 Socket 操作rn 3、IServer 和 IAgent 接口删除接口方法: Get/SetRecvPolicy()rn 4、IServer 和 IAgent 接口删除接口方法: Get/SetMaxShutdownWaitTime()rn------------------------------------------------------------------------------------------------
高性能 TCP & UDP 通信框架 HP-Socket v5.1.1 for Windows
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP/HTTP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。[i][b]HP-Socket for Linux[/b][/i] 即将发布,敬请期待。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=https://github.com/ldcsaa/HP-Socket]https://github.com/ldcsaa/HP-Socket[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/<em>hp-socket</em>/doc[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn   3、HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。rnrn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v5.1.1 更新 ***[/color][/size][/b]rnrn[b][i]> 增加暂停接收功能:[/i][/b]rn----------------- rn 1、所有 Server/Agent/Client 组件增加‘暂停接收数据’功能(UDP Server 组件除外)rn 2、API 更新:[code=c]1) HP_Server_PauseReceive (增加)rn2) HP_Server_IsPauseReceive (增加)rn3) HP_Agent_PauseReceive (增加)rn4) HP_Agent_IsPauseReceive (增加)rn5) HP_Client_PauseReceive (增加)rn6) HP_Client_IsPauseReceive (增加)[/code]rnrn[b][i]> 其它更新:[/i][/b]rn-----------------rn 1、TCP Agent 增加方法 HP_Agent_ConnectWithExtra(),支持在连接完成前绑定附加数据rn 2、公共代码包 vc-common-src 版本升级到 v2.3.22rn 3、OpenSSL 版本升级到 1.1.0grn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v5.0.1 更新 ***[/color][/size][/b]rnrn[b][i]> IPv6 支持:[/i][/b]rn----------------- rn 1、所有通信组件支持 IPv6rn 2、组件接口没有变化,组件内部通过传入的地址参数自动识别 IPv4 / IPv6rn 3、API 更新:[code=c]1) enum En_HP_IPAddrType (增加)rn2) struct HP_TIPAddr (增加)rn3) SYS_GetIPv4InAddr (删除)rn4) SYS_GetOptimalIPByHostName (删除)rn5) SYS_IsIPAddress (修改)rn6) SYS_GetIPAddress (修改)rn7) SYS_EnumHostIPAddresses (增加)rn8) SYS_FreeHostIPAddresses (增加)[/code]rnrn[b][i]> SSL 通信组件:[/i][/b]rn-----------------rn 1、多 SSL 证书支持,每个通信组件对象可以使用不同的 SSL 证书rn 2、通信组件对象绑定独立的 SSL Context,取代旧版本的全局唯一 SSL Contextrn 3、API 更新:[code=c]1) HP_SSL_Initialize (删除)rn2) HP_SSL_Cleanup (删除)rn3) HP_SSL_IsValid (删除)rn4) HP_SSLAgent_SetupSSLContext (增加)rn5) HP_SSLClient_SetupSSLContext (增加)rn6) HP_SSLServer_SetupSSLContext (增加)rn7) HP_SSLServer_AddSSLContext (增加)rn8) HP_SSLAgent_CleanupSSLContext (增加)rn9) HP_SSLClient_CleanupSSLContext (增加)rn10) HP_SSLServer_CleanupSSLContext (增加)[/code]rn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v4.2.1 更新 ***[/color][/size][/b]rnrn[b][i]> HTTP Cookie 管理支持:[/i][/b]rn----------------- rn 1、新增 Cookie 管理器,可在不同连接、不同组件对象间共享 Cookiern 2、Cookie 管理器实现了标准 HTTP Cookie 功能,支持 Max-Age、expires、httpOnly、securern 3、Cookie 管理器支持 Cookie 序列化与反序列化rn 4、IHttpClient 和 IHttpAgent 组件可通过 SetUseCookie() 方法设置是否开启 Cookie 功能rn[img=https://img-bbs.csdn.net/upload/201704/20/1492684145_272465.png][/img]rn[b][i]> HTTP Sync Client 通信组件更新:[/i][/b]rn-----------------rn 1、Create_HP_HttpSyncClient 和 Create_HP_HttpsSyncClient 方法增加可选参数 pListenerrn 2、如果 pListener 非空则可以通过 pListener 监听 HttpSyncClient 的所有通信事件rnrn[b][i]> 其它更新:[/i][/b]rn-----------------rn 1、Demo 更新:HttpProxy,TestEcho-Http,TestEcho-Http-4Crn 2、公共代码包 vc-common-src 版本升级到 v2.3.18rn 3、OpenSSL 版本升级到 1.1.0ern------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.1.3 更新 ***[/color][/size][/b]rnrn[b][i]> WebSocket 支持:[/i][/b]rn----------------- rn 1、所有 HTTP 组件增加 WebSocket 方法:rn 1) SendWSMessage(): 发送 WebSocket 数据包rn 2) GetWSMessageState(): 获取当前 WebSocket 状态rn 2、所有 HTTP 组件监听器增加 WebSocket 事件:rn 1) OnWSMessageHeader(): WebSocket 数据包头通知rn 2) OnWSMessageBody(): WebSocket 数据包体通知rn 3) OnWSMessageComplete(): WebSocket 数据包完成通知rn 3、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 支持 WebSocketrnrn[b][i]> 增加 HTTP Sync Client 通信组件:[/i][/b]rn-----------------rn 1、HTTP Sync Client 实现同步 HTTP 通信,不需要事件监听器rn 2、HTTP Sync Client 组件类: CHttpSyncClient、CHttpsSyncClientrn 3、HTTP Sync Client 实现接口: ITcpClient / IHttpSyncRequesterrn 4、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 提供 HTTP Sync Client 示例rn------------------------------------------------------------------------------------------------
高性能 TCP & UDP 通信框架 HP-Socket v3.5.3 发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/<em>hp-socket</em>/doc[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn   3、HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。rnrn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.5.3 更新 ***[/color][/size][/b]rn rn[b][i]> Bug 修复:[/i][/b]rn-----------------rn 1、修复 IClient 组件在极端情况下触发两次 OnClose() 事件 Bugrn 2、修复 IClient 组件在极端情况下销毁 IClient 对象导致程序崩溃 Bugrn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v3.5.2 更新 ***[/color][/size][/b]rn rn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、IClient 组件 Start() 方法默认连接方式改为异步连接rn 2、IClient 组件 Start() 方法增加可选参数 lpszBindAddress,设置绑定地址rn 3、HP-Socket 4C 增加导出方法 HP_Client_StartWithBindAddress() 方法,可设置绑定地址rn 4、IUdpCast 组件删除接口方法 Get/SetBindAddress()rn 5、IServer 接口 增加 GetLocalAddress() 方法用于获取连接的本地地址信息rn 6、增加全局函数 SYS_GetSocketLocalAddress() 和 SYS_GetSocketRemoteAddress() 分别用于获取 SOCKET 本地和远程地址信息rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.5.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 SSL 系列通信组件:[/i][/b]rn-----------------rn 1、新增 SSL PUSH 组件:CSSLServer、CSSLAgent、CSSLClientrn 2、新增 SSL PULL 组件:CSSLPullServer、CSSLPullAgent、CSSLPullClientrn 3、新增 SSL PACK 组件:CSSLPackServer、CSSLPackAgent、CSSLPackClientrn 4、SSL Server 实现 ITcpServer 接口,SSL Agent 实现 ITcpAgent 接口,SSL Client 实现 ITcpClient 接口rn 5、启动 SSL 通信组件前需要调用 HP_SSL_Initialize() 函数初始化 SSL 全局环境参数rn 6、通信结束后调用 HP_SSL_Cleanup() 函数清理 SSL 全局运行环境rn 7、新增 SSL 相关示例 Demo:rn 1) TestEcho-SSL (源代码)rn 2) TestEcho-SSL-Pack (DLL / 4C DLL)rn 3) TestEcho-SSL-4C (4C LIB)rn 4) TestEcho-SSL-PFM (LIB)rn[img=https://img-bbs.csdn.net/upload/201605/23/1463992712_737233.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、ITcpServerListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 2、ITcpAgentListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 3、ITcpClientListener 接口增加 SSL 握手成功事件:OnHandShake(IClient* pClient)rn 4、枚举类型 EnSocketError 增加‘SSL 环境未就绪’错误代码 SE_SSL_ENV_NOT_READYrn 5、增加枚举类型:EnSSLSessionMode(SSL 工作模式),EnSSLVerifyMode(SSL 验证模式)rn 6、HPSocket-SSL DLL 主要头文件:SocketInterface-SSL.h,HPSocket-SSL.hrn 7、HPSocket4C-SSL DLL 主要头文件:HPSocket4C-SSL.hrn 8、Tcp Pack 系列组件可设置的最大包长调整为 4194303/0x3FFFFF 字节rn 9、Tcp Pack 系列组件的有效包头标识取值范围调整为 0 ~ 1023/0x3FFrnrn[b][i]> 增加静态库工程:[/i][/b]rn-----------------rn 1、新增项目工程 HPSocketLIB 和 HPSocketLIB4C 用于编译 HPSocket 和 HPSocket4C 静态库rn 2、静态库与动态库的使用方式一致(请参考示例 Demo:TestEcho-SSL-4C 和 TestEcho-SSL-PFM)rn 3、使用 HPSocket 或 HPSocket4C 静态库时,需要在工程属性中定义预处理宏 -> HPSOCKET_STATIC_LIBrn 4、静态库目标文件不包含在发布包中(因为太大),如果需要请自行编译rn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v3.4.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 Tcp Pack 系列通信组件:[/i][/b]rn-----------------rn 1、Tcp Pack 系列组件保证每个 OnReceive 事件都向应用程序提供一个完整数据包rn 2、Tcp Pack 系列组件是 PUSH/PULL 模式的结合体,应用程序不必处理分包(如:PUSH)与数据抓取(如:PULL)rn 3、Tcp Pack 系列组件提供 Get/SetMaxPackSize() 和 Get/SetPackHeaderFlag() 方法,用来设置最大包长和包头标识rn 4、CTcpPackServer 实现 ITcpServer 接口,CTcpPackAgent 实现 ITcpAgent 接口,CTcpPackClient 实现 ITcpClient 接口rn[img=https://img-bbs.csdn.net/upload/201603/27/1459080805_239193.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、OnClose/OnError 合并为一个通信事件: OnClose(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rn 2、枚举类型 EnSocketOperation 增加一个枚举值: SO_CLOSE = 5,标识关闭 Socket 操作rn 3、IServer 和 IAgent 接口删除接口方法: Get/SetRecvPolicy()rn 4、IServer 和 IAgent 接口删除接口方法: Get/SetMaxShutdownWaitTime()rn------------------------------------------------------------------------------------------------
高性能网络通信框架 HP-Socket v5.5.1,支持可靠UDP
[url=https://github.com/ldcsaa/HP-Socket][img=https://img-bbs.csdn.net/upload/201904/16/1555345051_823245.png][/img][/url]rnrn [b]项目主页 :[/b] [url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn [b]开发文档 :[/b] [url=https://www.docin.com/p-2192372809.html]https://www.docin.com/p-2192372809.html[/url]rn [b]下载地址 :[/b] [url=https://github.com/ldcsaa/HP-Socket]https://github.com/ldcsaa/HP-Socket[/url]rn [b]QQ Group :[/b] [url=http://shang.qq.com/wpa/qunwpa?idkey=5056a5463f52cac937e0da8a0c313993073294a3dafaeec3724735a030d4e294]75375912[/url], [url=http://shang.qq.com/wpa/qunwpa?idkey=f5273069775c0c98e43bd4960702b5a9b4812b000771f5a1d3f34c544f3b6d6c]44636872[/url]rnrn [size=18px] [color=#FF6600][b][i] 本次更新对 UDP 系列组件作了大量优化,新增了可靠 UDP 组件![/i][/b][/color][/size]rnrn [size=24px][b]v5.5.1 更新[/b][/size]rnrn [size=16px][b] 一、UDP 组件更新[/b][/size]rn 1. 增加可靠 UDP 组件:IUdpArqServer、IUdpArqClientrn 2. 增加可靠 UDP 示例 TestEcho-ARQ 和性能测试示例 TestEcho-ARQ-PFMrn 3. 可靠 UDP 组件详细说明请参考开发文档 《HP-Socket Development Guide》rn 4. 优化 IUdpServer 组件,修复潜在缺陷rn 5. C# SDK 增加 UDP 组件封装类rn [img=https://img-bbs.csdn.net/upload/201904/16/1555345441_12065.jpg][/img]rnrn [size=16px][b] 二、Linux 更新[/b][/size]rn 1. 提供 Shell 编译脚本 [color=#800080][i]compile.sh[/i][/color],支持在本机编译 HP-Socketrn 2. 提供 Android NDK 交叉编译脚本(脚本目录:[color=#993300][i]/project/android-ndk[/i][/color])rnrn [size=16px][b] 三、其他更新[/b][/size]rn 1. http-parser 升级到 2.9.1 版本rn 2. jemalloc 升级到 5.2.0 版本rnrn --------------------------------------------------------------------------------rnrn [size=24px][b]HP-Socket 组件列表[/b][/size]rnrn [b] 1. 基础组件[/b]rn [img=https://img-bbs.csdn.net/upload/201904/16/1555347457_574039.jpeg][/img]rnrn [b] 2. SSL 组件[/b]rn [img=https://img-bbs.csdn.net/upload/201904/16/1555347503_957589.jpg][/img]rnrn [b] 3. HTTP 组件[/b]rn [img=https://img-bbs.csdn.net/upload/201904/16/1555347529_721498.jpg][/img]rn
高性能网络通信框架 HP-Socket v5.5.3,支持可靠 UDP
[url=https://github.com/ldcsaa/HP-Socket][img=https://img-bbs.csdn.net/upload/201904/16/1555345051_823245.png][/img][/url]rnrn [b]项目主页 :[/b] [url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn [b]开发文档 :[/b] [url=https://www.docin.com/p-2224828035.html]https://www.docin.com/p-2224828035.html[/url]rn [b]下载地址 :[/b] [url=https://github.com/ldcsaa/HP-Socket]https://github.com/ldcsaa/HP-Socket[/url]rn [b]QQ Group :[/b] [url=http://shang.qq.com/wpa/qunwpa?idkey=5056a5463f52cac937e0da8a0c313993073294a3dafaeec3724735a030d4e294]75375912[/url], [url=http://shang.qq.com/wpa/qunwpa?idkey=f5273069775c0c98e43bd4960702b5a9b4812b000771f5a1d3f34c544f3b6d6c]44636872[/url]rnrn [size=18px] [color=#FF6600][b][i] 本次更新对 UDP 系列组件作了大量优化,新增了可靠 UDP 组件![/i][/b][/color][/size]rnrn [size=24px][b]v5.5.3 更新[/b][/size]rnrn [size=16px][b] 一、UDP 组件更新[/b][/size]rn 1. 增加可靠 UDP 组件:IUdpArqServer、IUdpArqClientrn 2. 增加可靠 UDP 示例 TestEcho-ARQ 和性能测试示例 TestEcho-ARQ-PFMrn 3. 可靠 UDP 组件详细说明请参考开发文档 《HP-Socket Development Guide》rn 4. 优化 IUdpServer 组件,修复潜在缺陷rn 5. C# SDK 增加 UDP 组件封装类rn 6. 放宽 UDP 组件的最大报文长度限制,SetMaxDatagramSize() 方法的最大值可以设置到 64KBrn 7. 放宽 ARQ UDP 组件的最大传输单元长度限制,SetMaxTransUnit() 方法的最大值可以设置到 64KBrn [img=https://img-bbs.csdn.net/upload/201904/16/1555345441_12065.jpg][/img]rnrn [size=16px][b] 二、Android NDK 更新[/b][/size]rn 1. 提供构建脚本 [color=#993300][i]build-android-ndk.sh[/i][/color] 用于编译 Android NDK 库文件rn 2. 提供构建脚本 [color=#993300][i]demo/build-android-ndk-demo.sh[/i][/color] 用于编译 Android NDK 示例可执行文件rn 3. 在发布包中提供已编译好的 Android NDK 库文件rn 4. Android NDK 库完全支持 [color=#800000][i]SSL[/i][/color] 和 [color=#800000][i]ICONV[/i][/color] 功能rnrn [size=16px][b] 三、其他更新[/b][/size]rn 1. 修复 HP-Socket .net core SDK 在 Linux 平台下启动失败问题rn 2. 完善 Delphi SDK 及其示例 Demorn 3. 代码优化,提高稳定性rnrn --------------------------------------------------------------------------------rnrn [size=24px][b]HP-Socket 组件列表[/b][/size]rnrn [b] 1. 基础组件[/b]rn [img=https://img-bbs.csdn.net/upload/201904/16/1555347457_574039.jpeg][/img]rnrn [b] 2. SSL 组件[/b]rn [img=https://img-bbs.csdn.net/upload/201904/16/1555347503_957589.jpg][/img]rnrn [b] 3. HTTP 组件[/b]rn [img=https://img-bbs.csdn.net/upload/201904/16/1555347529_721498.jpg][/img]rn
高性能网络通信框架 HP-Socket v5.5.2,支持可靠 UDP
项目主页 : http://www.oschina.net/p/<em>hp-socket</em> 开发文档 : https://www.docin.com/p-2212773943.html 下载地址 : https://github.com/ldcsaa/HP-Socket QQ Group: 75375912, 44636872 本次更新对 UDP 系列组件作了大量优化,新增了可靠 UDP 组件! ...
网络通信框架 HP-Socket v5.5.1,支持可靠 UDP
开发四年只会写业务代码,分布式高并发都不会还做程序员? &gt;&gt;&gt; 项目主页:http...
高性能 TCP & UDP 通信框架 HP-Socket v3.3.2 正式发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn rn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   HP-Socket 作为底层的通用框架,性能是关键指标,绝对不能成为系统的瓶颈。HP-Socket 在设计上充分考虑性能、使用场景、复杂性和易用性等因素,作出以下几点设计决策:rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.3.2 更新 ***[/color][/size][/b]rn rn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、IClientListener 监听器接口用 IClient* 参数取代 CONNID 参数标识 Client 组件对象rn 2、增加 IPullClient 接口,用作 PULL Client 组件的基接口rn 3、IPullSocket 和 IPullClient 接口增加 Peek() 方法用于窥探缓冲区数据(不会移除缓冲区数据)rn 4、增加 IComplexSocketListener 监听器接口,用作 Server/Agent 组件的监听器基接口rn 5、IComplexSocketListener 提供 OnShutdown 通知方法取代 Server/Agent 组件原来的 OnServerShutdown/OnAgentShutdownrn 6、IClient组件增加 Get/SetExtra() 方法用于保存自定义附加数据rn 7、IServer 和 IAgent 组件增加“静默连接处理”相关方法:[code=c]rn1) DisconnectSilenceConnections():// 断开超过指定时长的静默连接 rn2) GetSilencePeriod():// 获取某个连接静默时间(毫秒) rn3) SetMarkSilence():// 设置是否标记静默时间 rn4) IsMarkSilence():// 检测是否标记静默时间[/code][b][i]> 增加 UdpCast 通信组件:[/i][/b]rn-----------------rn 1、UdpClient / UdpServer 用于 C/S 模式的点对点单播通信,但在某些应用场景下,需要用到组播或广播通信rn 2、UdpCast 实现了组播或广播通信,UdpCast 提供 IUdpCast 接口,该接口继承自 IClient,有以下接口方法: [code=c]/* 1) 通知接口方法: */ rnOnPrepareConnect(IClient* pClient, SOCKET socket) rnOnConnect(IClient* pClient) rnOnSend(IClient* pClient, const BYTE* pData, int iLength) rnOnReceive(IClient* pClient, const BYTE* pData, int iLength) rnOnClose(IClient* pClient) rnOnError(IClient* pClient, EnSocketOperation enOperation, int iErrorCode) rn rn/* 2) 主要操作方法: */ rnStart(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE /*该参数被忽略*/) rnStop() rnConnect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr) rnSend(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0) rnSendPackets(const WSABUF pBuffers[], int iCount) [/code] 3、增加 UdpCast 使用示例:TestUDPCastrn[img=https://img-bbs.csdn.net/upload/201501/27/1422330885_541813.png][/img]rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.2 更新 ***[/color][/size][/b]rn rn[b][i]> 增加若干帮助方法:[/i][/b]rn-----------------rn 1、批量发送方法 SendPackets()[code=text]rn1) IClient/IServer/IAgent 增加方法 SendPackets(pBuffers[], iBufferCount)rn2) 对于 TCP 组件 - 顺序发送所有数据包rn3) 对于 UDP 组件 - 把所有数据包组合成一个数据包发送(总长度不能大于 UDP 包最大长度)rn[/code] 2、小文件发送方法 SendSmallFile() [code=text]rn1) TCP 组件增加方法 SendSmallFile(lpszFileName, pHead, pTail)rn2) 通过 pHead 和 pTail 参数,可以分别在文件数据的头部和尾部加入自定义数据rn3) SendSmallFile() 只能发送 4096 KB 以内大小的文件rn[/code] 3、HPSocket.dll 和 HPSocket4C.dll 增加以下导出方法[code=text]rn1) SYS_WSAGetLastError():调用系统的 WSAGetLastError()rn2) SYS_SetSocketOption():调用系统的 setsockopt()rn3) SYS_GetSocketOption():调用系统的 getsockopt()rn4) SYS_IoctlSocket() :调用系统的 ioctlsocket()rn5) SYS_WSAIoctl() :调用系统的 WSAIoctl()[/code]------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 TcpAgent / TcpPullAgent 通信组件:[/i][/b]rn-----------------rn 1、对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接rn 2、TcpClient / TcpPullClient 基于 Event Select 通信模型,每个组件对象管理一个 Socket,并开启一个线程,不适合上述应用场景rn 3、TcpAgent / TcpPullAgent 基于 IOCP 通信模型,一个组件对象管理多个 Socket,适合用作代理服务器或中转服务器的客户端通信组件rn 4、TcpAgent / TcpPullAgent 的使用方式依然简单,提供以下接口方法:rn[code=c]rn/* 1) 通知接口方法:*/rnOnPrepareConnect(CONNID dwConnID, SOCKET socket)rnOnConnect(CONNID dwConnID)rnOnSend(CONNID dwConnID, const BYTE* pData, int iLength)rnOnReceive(CONNID dwConnID, const BYTE* pData, int iLength) //(Push 模型)rnOnReceive(CONNID dwConnID, int iLength) //(Pull 模型)rnOnClose(CONNID dwConnID)rnOnError(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rnOnAgentShutdown()rnrn/* 2) 主要操作方法:*/rnStart(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE)rnStop()rnConnect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)rnSend(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0)rnDisconnect(CONNID dwConnID, BOOL bForce = TRUE)rnFetch(CONNID dwConnID, BYTE* pData, int iLength) //(Pull 模型)rn[/code] 5、增加 TcpAgent / TcpPullAgent 使用示例:rn * Agent-PFMrn * Agent-Pullrn * Agent-4Crn[img=https://img-bbs.csdn.net/upload/201406/05/1401936622_343162.jpg][/img]rn 6、增加 TcpAgent + TcpServer 实现的 HTTP 代理服务器示例:HttpProxyrn[img=https://img-bbs.csdn.net/upload/201406/05/1401936640_775605.jpg][/img]rnrn[b][i]> 增加 HPSocket for Java SDK:[/i][/b]rn-----------------rn 1、提供 Java 开发包:hpsocket-3.2.1.jar(通过 JNA 实现,目前只支持 Windows 平台)rn 2、运行环境:JDK 1.6+,JVM 运行在 server 模式("java -server",在 client 模式下性能受影响)rn 3、MBCS 和 Unicode 版本分布位于包 org.jessma.hpsocket.mbcs 和 org.jessma.hpsocket.unicodern 4、HPSocket for Java SDK 提供以下通信组件:rn[code=text]rn1) TcpServer:TCP 通信服务端组件,支持 PUSH/PULL 模型rn2) TcpClient:TCP 通信客户端组件,支持 PUSH/PULL 模型rn3) TcpAgent :TCP 通信 Agent 组件,支持 PUSH/PULL 模型rn4) UdpServer:UDP 通信服务端组件,支持 PUSH 模型rn5) UdpClient:UDP 通信客户端组件,支持 PUSH 模型rn[/code] 5、HPSocket4J 的使用方法(以 TcpAgent 为例):rn[code=c]rn/* 0: 应用程序加入 hpsocket-3.2.1.jar 和 jna-4.1.0.jar */rnrn/* 1: 创建通信组件对象 */rnTcpAgent agent = TcpAgent.create(Mode.PUSH);rnrn/* 2: 设置回调函数对象 */rn// (可选)rnagent.setCallBackOnPrepareConnect(new OnPrepareConnectImpl());rn// (可选)rnagent.setCallBackOnConnect(new OnConnectImpl());rn// (必须)PUSH 模型需要设置 OnReceive 回调函数对象rnagent.setCallBackOnReceive(new OnReceiveImpl());rn// (必须)PULL 模型需要设置 OnPullReceive 回调函数对象rn// agent.setCallBackOnPullReceive(new OnPullReceiveImpl());rn// (可选)rnagent.setCallBackOnSend(new OnSendImpl());rn// (必须)rnagent.setCallBackOnClose(new OnCloseImpl());rn// (必须)rnagent.setCallBackOnError(new OnErrorImpl());rn// (可选)rnagent.setCallBackOnAgentShutdown(new OnAgentShutdownImpl());rnrn/* 3:启动通信组件 */rnagent.start("127.0.0.1", false);rnrn/* 4:连接服务器 */rnagent.connect("localhost", (short)5555, pdwConnID);rnrn/* 5:处理通信数据 */rn// 响应 OnReceive / OnPullReceive 事件接收数据rn// 使用 agent.send(dwConnID, data, data.length) 发送数据rnrn/* 6:关闭通信组件 */rnagent.stop();rnrn/* 7:销毁通信组件 */rnTcpAgent.destroy(agent);rn[/code] 6、增加示例工程 TestEcho-4J,展示 HPSocket4J 的使用方法(包括 PULL 模型示例和性能测试示例)rn[img=https://img-bbs.csdn.net/upload/201406/05/1401936663_823244.jpg][/img]rnrn[b][i]> 优化数据收发策略:[/i][/b]rn-----------------rn 1、Server 和 Agent 组件提供以下三种数据发送策略:rn[code=text]rn1)PACK - 打包模式(默认):尽量把多个发送操作的数据组合在一起发送,增加传输效率rn2)SAFE - 安全模式:尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出rn3)DIRECT - 直接模式:对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合rn[/code] 2、Server 和 Agent 组件提供以下两种数据接收策略:rn[code=text]rn1)SERIAL - 串行模式(默认):顺序触发同一连接的 OnReceive 和 OnClose/OnError 事件rn2)PARALLEL - 并行模式:在不同的通信线程中同时触发同一连接的 OnReceive 和 OnClose/OnError 事件 rn[/code]------------------------------------------------------------------------------------------------
高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1 发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP/HTTP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/<em>hp-socket</em>/doc[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn   3、HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。rnrn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.1.1 更新 ***[/color][/size][/b]rnrn[b][i]> WebSocket 支持:[/i][/b]rn----------------- rn 1、所有 HTTP 组件增加 WebSocket 方法:rn 1) SendWSMessage(): 发送 WebSocket 数据包rn 2) GetWSMessageState(): 获取当前 WebSocket 状态rn 2、所有 HTTP 组件监听器增加 WebSocket 事件:rn 1) OnWSMessageHeader(): WebSocket 数据包头通知rn 2) OnWSMessageBody(): WebSocket 数据包体通知rn 3) OnWSMessageComplete(): WebSocket 数据包完成通知rn 3、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 支持 WebSocketrnrn[b][i]> 增加 HTTP Sync Client 通信组件:[/i][/b]rn-----------------rn 1、HTTP Sync Client 实现同步 HTTP 通信,不需要事件监听器rn 2、HTTP Sync Client 组件类: CHttpSyncClient、CHttpsSyncClientrn 3、HTTP Sync Client 实现接口: ITcpClient / IHttpSyncRequesterrn 4、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 提供 HTTP Sync Client 示例rnrn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.0.1 更新 ***[/color][/size][/b]rnrn[b][i]> 增加 HTTP 系列通信组件:[/i][/b]rn----------------- rn[img=https://img-bbs.csdn.net/upload/201610/08/1475857393_73495.png][/img]rn[img=https://img-bbs.csdn.net/upload/201610/08/1475857418_443165.png][/img]rn 1、新增 HTTP Server 组件:rn 1) 组件类: CHttpServer、CHttpsServerrn 2) 实现接口: ITcpServer / IComplexHttpResponderrn 3) 监听器接口: IHttpServerListenerrn 2、新增 HTTP Agent 组件:rn 1) 组件类: CHttpAgent、CHttpsAgentrn 2) 实现接口: ITcpAgent / IComplexHttpRequesterrn 3) 监听器接口: IHttpAgentListenerrn 3、新增 HTTP Client 组件:rn 1) 组件类: CHttpClient、CHttpsClientrn 2) 实现接口: ITcpClient / IHttpRequesterrn 3) 监听器接口: IHttpClientListenerrn 4、新增 HTTP 示例 Demo:rn 1) TestEcho-Http (源代码)rn 2) TestEcho-Http-4C (4C LIB / 4C DLL)rn 5、Http 监听器:rn 1) 监听器事件:[code=text]OnMessageBegin() : 【可选】开始解析rnOnRequestLine() : 【可选】请求行解析完成(仅用于 HTTP 服务端)rnOnStatusLine() : 【可选】状态行解析完成(仅用于 HTTP 客户端)rnOnHeader() : 【可选】请求头通知rnOnHeadersComplete() : 【必须】请求头完成通知rnOnBody() : 【必须】请求体报文通知rnOnChunkHeader() : 【可选】Chunked 报文头通知rnOnChunkComplete() : 【可选】Chunked 报文结束通知rnOnMessageComplete() : 【必须】完成解析通知rnOnUpgrade() : 【可选】升级协议通知rnOnParseError() : 【必须】解析错误通知[/code] 2) 监听器事件返回值(EnHttpParseResult):rn[code=text]HPR_OK : 继续解析rnHPR_SKIP_BODY : 跳过当前请求 BODY(仅用于 OnHeadersComplete 事件)rnHPR_UPGRADE : 升级协议(仅用于 OnHeadersComplete 事件)rnHPR_ERROR : 终止解析,断开连接[/code][b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、IServer 和 IAgent 组件的所有监听器回调方法增加‘事件源’参数,如:OnShutdown() -> OnShutdown(T* pSender)rn 2、IClient 组件的所有监听器回调方法增加‘连接ID’参数,如:OnHandShake(IClient* pClient) -> OnHandShake(T* pSender, CONNID dwConnID)rn 3、IServer 和 IAgent 接口增加接口方法: Get/SetMaxConnectionCount() 用于设置最大连接数,最大连接数默认:10000rn 4、OnHandShake() 事件触发规则调整:非 SSL 组件在 OnConnect() 事件后也触发 OnHandShake() 事件,使 SSL 组件和 SSL 组件处理流程一致rn 5、HPSocket4C 增加 PACK 组件监听器的创建、销毁方法,新版本必须使用下列方法创建、销毁 PACK 组件监听器:rn 1) Create_HP_TcpPackServerListener / Destroy_HP_TcpPackServerListenerrn 2) Create_HP_TcpPackAgentListener / Destroy_HP_TcpPackAgentListenerrn 3) Create_HP_TcpPackClientListener / Destroy_HP_TcpPackClientListenerrn 6、SSL 组件支持 SNIrn 1) SSL 初始化方法 HP_SSL_Initialize(),增加 SNI 回调函数指针参数rn 2) 新增方法 HP_SSL_AddServerContext(),用于 加载 SNI 主机证书rnrn[b][i]> 其他更新:[/i][/b]rn-----------------rn 1、IServer 和 IAgent 组件采用 Ring Pool 取代 R/W Lock + Map 维护活动连接,提升读写和并发性能rn 2、更新所有 Demo 示例代码rnrn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.5.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 SSL 系列通信组件:[/i][/b]rn-----------------rn 1、新增 SSL PUSH 组件:CSSLServer、CSSLAgent、CSSLClientrn 2、新增 SSL PULL 组件:CSSLPullServer、CSSLPullAgent、CSSLPullClientrn 3、新增 SSL PACK 组件:CSSLPackServer、CSSLPackAgent、CSSLPackClientrn 4、SSL Server 实现 ITcpServer 接口,SSL Agent 实现 ITcpAgent 接口,SSL Client 实现 ITcpClient 接口rn 5、启动 SSL 通信组件前需要调用 HP_SSL_Initialize() 函数初始化 SSL 全局环境参数rn 6、通信结束后调用 HP_SSL_Cleanup() 函数清理 SSL 全局运行环境rn 7、新增 SSL 相关示例 Demo:rn 1) TestEcho-SSL (源代码)rn 2) TestEcho-SSL-Pack (DLL / 4C DLL)rn 3) TestEcho-SSL-4C (4C LIB)rn 4) TestEcho-SSL-PFM (LIB)rn[img=https://img-bbs.csdn.net/upload/201605/23/1463992712_737233.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、ITcpServerListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 2、ITcpAgentListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 3、ITcpClientListener 接口增加 SSL 握手成功事件:OnHandShake(IClient* pClient)rn 4、枚举类型 EnSocketError 增加‘SSL 环境未就绪’错误代码 SE_SSL_ENV_NOT_READYrn 5、增加枚举类型:EnSSLSessionMode(SSL 工作模式),EnSSLVerifyMode(SSL 验证模式)rn 6、HPSocket-SSL DLL 主要头文件:SocketInterface-SSL.h,HPSocket-SSL.hrn 7、HPSocket4C-SSL DLL 主要头文件:HPSocket4C-SSL.hrn 8、Tcp Pack 系列组件可设置的最大包长调整为 4194303/0x3FFFFF 字节rn 9、Tcp Pack 系列组件的有效包头标识取值范围调整为 0 ~ 1023/0x3FFrnrn[b][i]> 增加静态库工程:[/i][/b]rn-----------------rn 1、新增项目工程 HPSocketLIB 和 HPSocketLIB4C 用于编译 HPSocket 和 HPSocket4C 静态库rn 2、静态库与动态库的使用方式一致(请参考示例 Demo:TestEcho-SSL-4C 和 TestEcho-SSL-PFM)rn 3、使用 HPSocket 或 HPSocket4C 静态库时,需要在工程属性中定义预处理宏 -> HPSOCKET_STATIC_LIBrn 4、静态库目标文件不包含在发布包中(因为太大),如果需要请自行编译rn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v3.4.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 Tcp Pack 系列通信组件:[/i][/b]rn-----------------rn 1、Tcp Pack 系列组件保证每个 OnReceive 事件都向应用程序提供一个完整数据包rn 2、Tcp Pack 系列组件是 PUSH/PULL 模式的结合体,应用程序不必处理分包(如:PUSH)与数据抓取(如:PULL)rn 3、Tcp Pack 系列组件提供 Get/SetMaxPackSize() 和 Get/SetPackHeaderFlag() 方法,用来设置最大包长和包头标识rn 4、CTcpPackServer 实现 ITcpServer 接口,CTcpPackAgent 实现 ITcpAgent 接口,CTcpPackClient 实现 ITcpClient 接口rn[img=https://img-bbs.csdn.net/upload/201603/27/1459080805_239193.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、OnClose/OnError 合并为一个通信事件: OnClose(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rn 2、枚举类型 EnSocketOperation 增加一个枚举值: SO_CLOSE = 5,标识关闭 Socket 操作rn 3、IServer 和 IAgent 接口删除接口方法: Get/SetRecvPolicy()rn 4、IServer 和 IAgent 接口删除接口方法: Get/SetMaxShutdownWaitTime()rn------------------------------------------------------------------------------------------------
高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2 发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP/HTTP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/<em>hp-socket</em>/doc[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn   3、HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。rnrn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.1.2 更新 ***[/color][/size][/b]rnrn[b][i]> WebSocket 支持:[/i][/b]rn----------------- rn 1、所有 HTTP 组件增加 WebSocket 方法:rn 1) SendWSMessage(): 发送 WebSocket 数据包rn 2) GetWSMessageState(): 获取当前 WebSocket 状态rn 2、所有 HTTP 组件监听器增加 WebSocket 事件:rn 1) OnWSMessageHeader(): WebSocket 数据包头通知rn 2) OnWSMessageBody(): WebSocket 数据包体通知rn 3) OnWSMessageComplete(): WebSocket 数据包完成通知rn 3、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 支持 WebSocketrnrn[b][i]> 增加 HTTP Sync Client 通信组件:[/i][/b]rn-----------------rn 1、HTTP Sync Client 实现同步 HTTP 通信,不需要事件监听器rn 2、HTTP Sync Client 组件类: CHttpSyncClient、CHttpsSyncClientrn 3、HTTP Sync Client 实现接口: ITcpClient / IHttpSyncRequesterrn 4、示例 Demo TestEcho-Http 和 TestEcho-Http-4C 提供 HTTP Sync Client 示例rnrn[b][i]> 其它更新:[/i][/b]rn-----------------rn 1、采用新环形缓冲区算法提高异步操作安全性rn 2、采用延时释放策略提高 HTTP 异步操作安全性rnrn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.0.1 更新 ***[/color][/size][/b]rnrn[b][i]> 增加 HTTP 系列通信组件:[/i][/b]rn----------------- rn[img=https://img-bbs.csdn.net/upload/201610/08/1475857393_73495.png][/img]rn[img=https://img-bbs.csdn.net/upload/201610/08/1475857418_443165.png][/img]rn 1、新增 HTTP Server 组件:rn 1) 组件类: CHttpServer、CHttpsServerrn 2) 实现接口: ITcpServer / IComplexHttpResponderrn 3) 监听器接口: IHttpServerListenerrn 2、新增 HTTP Agent 组件:rn 1) 组件类: CHttpAgent、CHttpsAgentrn 2) 实现接口: ITcpAgent / IComplexHttpRequesterrn 3) 监听器接口: IHttpAgentListenerrn 3、新增 HTTP Client 组件:rn 1) 组件类: CHttpClient、CHttpsClientrn 2) 实现接口: ITcpClient / IHttpRequesterrn 3) 监听器接口: IHttpClientListenerrn 4、新增 HTTP 示例 Demo:rn 1) TestEcho-Http (源代码)rn 2) TestEcho-Http-4C (4C LIB / 4C DLL)rn 5、Http 监听器:rn 1) 监听器事件:[code=text]OnMessageBegin() : 【可选】开始解析rnOnRequestLine() : 【可选】请求行解析完成(仅用于 HTTP 服务端)rnOnStatusLine() : 【可选】状态行解析完成(仅用于 HTTP 客户端)rnOnHeader() : 【可选】请求头通知rnOnHeadersComplete() : 【必须】请求头完成通知rnOnBody() : 【必须】请求体报文通知rnOnChunkHeader() : 【可选】Chunked 报文头通知rnOnChunkComplete() : 【可选】Chunked 报文结束通知rnOnMessageComplete() : 【必须】完成解析通知rnOnUpgrade() : 【可选】升级协议通知rnOnParseError() : 【必须】解析错误通知[/code] 2) 监听器事件返回值(EnHttpParseResult):rn[code=text]HPR_OK : 继续解析rnHPR_SKIP_BODY : 跳过当前请求 BODY(仅用于 OnHeadersComplete 事件)rnHPR_UPGRADE : 升级协议(仅用于 OnHeadersComplete 事件)rnHPR_ERROR : 终止解析,断开连接[/code][b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、IServer 和 IAgent 组件的所有监听器回调方法增加‘事件源’参数,如:OnShutdown() -> OnShutdown(T* pSender)rn 2、IClient 组件的所有监听器回调方法增加‘连接ID’参数,如:OnHandShake(IClient* pClient) -> OnHandShake(T* pSender, CONNID dwConnID)rn 3、IServer 和 IAgent 接口增加接口方法: Get/SetMaxConnectionCount() 用于设置最大连接数,最大连接数默认:10000rn 4、OnHandShake() 事件触发规则调整:非 SSL 组件在 OnConnect() 事件后也触发 OnHandShake() 事件,使 SSL 组件和 SSL 组件处理流程一致rn 5、HPSocket4C 增加 PACK 组件监听器的创建、销毁方法,新版本必须使用下列方法创建、销毁 PACK 组件监听器:rn 1) Create_HP_TcpPackServerListener / Destroy_HP_TcpPackServerListenerrn 2) Create_HP_TcpPackAgentListener / Destroy_HP_TcpPackAgentListenerrn 3) Create_HP_TcpPackClientListener / Destroy_HP_TcpPackClientListenerrn 6、SSL 组件支持 SNIrn 1) SSL 初始化方法 HP_SSL_Initialize(),增加 SNI 回调函数指针参数rn 2) 新增方法 HP_SSL_AddServerContext(),用于 加载 SNI 主机证书rnrn[b][i]> 其他更新:[/i][/b]rn-----------------rn 1、IServer 和 IAgent 组件采用 Ring Pool 取代 R/W Lock + Map 维护活动连接,提升读写和并发性能rn 2、更新所有 Demo 示例代码rnrn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.5.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 SSL 系列通信组件:[/i][/b]rn-----------------rn 1、新增 SSL PUSH 组件:CSSLServer、CSSLAgent、CSSLClientrn 2、新增 SSL PULL 组件:CSSLPullServer、CSSLPullAgent、CSSLPullClientrn 3、新增 SSL PACK 组件:CSSLPackServer、CSSLPackAgent、CSSLPackClientrn 4、SSL Server 实现 ITcpServer 接口,SSL Agent 实现 ITcpAgent 接口,SSL Client 实现 ITcpClient 接口rn 5、启动 SSL 通信组件前需要调用 HP_SSL_Initialize() 函数初始化 SSL 全局环境参数rn 6、通信结束后调用 HP_SSL_Cleanup() 函数清理 SSL 全局运行环境rn 7、新增 SSL 相关示例 Demo:rn 1) TestEcho-SSL (源代码)rn 2) TestEcho-SSL-Pack (DLL / 4C DLL)rn 3) TestEcho-SSL-4C (4C LIB)rn 4) TestEcho-SSL-PFM (LIB)rn[img=https://img-bbs.csdn.net/upload/201605/23/1463992712_737233.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、ITcpServerListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 2、ITcpAgentListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 3、ITcpClientListener 接口增加 SSL 握手成功事件:OnHandShake(IClient* pClient)rn 4、枚举类型 EnSocketError 增加‘SSL 环境未就绪’错误代码 SE_SSL_ENV_NOT_READYrn 5、增加枚举类型:EnSSLSessionMode(SSL 工作模式),EnSSLVerifyMode(SSL 验证模式)rn 6、HPSocket-SSL DLL 主要头文件:SocketInterface-SSL.h,HPSocket-SSL.hrn 7、HPSocket4C-SSL DLL 主要头文件:HPSocket4C-SSL.hrn 8、Tcp Pack 系列组件可设置的最大包长调整为 4194303/0x3FFFFF 字节rn 9、Tcp Pack 系列组件的有效包头标识取值范围调整为 0 ~ 1023/0x3FFrnrn[b][i]> 增加静态库工程:[/i][/b]rn-----------------rn 1、新增项目工程 HPSocketLIB 和 HPSocketLIB4C 用于编译 HPSocket 和 HPSocket4C 静态库rn 2、静态库与动态库的使用方式一致(请参考示例 Demo:TestEcho-SSL-4C 和 TestEcho-SSL-PFM)rn 3、使用 HPSocket 或 HPSocket4C 静态库时,需要在工程属性中定义预处理宏 -> HPSOCKET_STATIC_LIBrn 4、静态库目标文件不包含在发布包中(因为太大),如果需要请自行编译rn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v3.4.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 Tcp Pack 系列通信组件:[/i][/b]rn-----------------rn 1、Tcp Pack 系列组件保证每个 OnReceive 事件都向应用程序提供一个完整数据包rn 2、Tcp Pack 系列组件是 PUSH/PULL 模式的结合体,应用程序不必处理分包(如:PUSH)与数据抓取(如:PULL)rn 3、Tcp Pack 系列组件提供 Get/SetMaxPackSize() 和 Get/SetPackHeaderFlag() 方法,用来设置最大包长和包头标识rn 4、CTcpPackServer 实现 ITcpServer 接口,CTcpPackAgent 实现 ITcpAgent 接口,CTcpPackClient 实现 ITcpClient 接口rn[img=https://img-bbs.csdn.net/upload/201603/27/1459080805_239193.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、OnClose/OnError 合并为一个通信事件: OnClose(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rn 2、枚举类型 EnSocketOperation 增加一个枚举值: SO_CLOSE = 5,标识关闭 Socket 操作rn 3、IServer 和 IAgent 接口删除接口方法: Get/SetRecvPolicy()rn 4、IServer 和 IAgent 接口删除接口方法: Get/SetMaxShutdownWaitTime()rn------------------------------------------------------------------------------------------------
高性能 TCP & UDP 通信框架 HP-Socket v3.2.3 正式发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn rn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   HP-Socket 作为底层的通用框架,性能是关键指标,绝对不能成为系统的瓶颈。HP-Socket 在设计上充分考虑性能、使用场景、复杂性和易用性等因素,作出以下几点设计决策:rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.3 更新 ***[/color][/size][/b]rn rn[b][i]> common-src 优化:[/i][/b]rn-----------------rn 1、优化通信组件的同步机制rn 2、整体性能提升约 10%rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.2 更新 ***[/color][/size][/b]rn rn[b][i]> 增加若干帮助方法:[/i][/b]rn-----------------rn 1、批量发送方法 SendPackets()[code=text]rn1) IClient/IServer/IAgent 增加方法 SendPackets(pBuffers[], iBufferCount)rn2) 对于 TCP 组件 - 顺序发送所有数据包rn3) 对于 UDP 组件 - 把所有数据包组合成一个数据包发送(总长度不能大于 UDP 包最大长度)rn[/code] 2、小文件发送方法 SendSmallFile() [code=text]rn1) TCP 组件增加方法 SendSmallFile(lpszFileName, pHead, pTail)rn2) 通过 pHead 和 pTail 参数,可以分别在文件数据的头部和尾部加入自定义数据rn3) SendSmallFile() 只能发送 4096 KB 以内大小的文件rn[/code] 3、HPSocket.dll 和 HPSocket4C.dll 增加以下导出方法[code=text]rn1) SYS_WSAGetLastError():调用系统的 WSAGetLastError()rn2) SYS_SetSocketOption():调用系统的 setsockopt()rn3) SYS_GetSocketOption():调用系统的 getsockopt()rn4) SYS_IoctlSocket() :调用系统的 ioctlsocket()rn5) SYS_WSAIoctl() :调用系统的 WSAIoctl()[/code]rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 TcpAgent / TcpPullAgent 通信组件:[/i][/b]rn-----------------rn 1、对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接rn 2、TcpClient / TcpPullClient 基于 Event Select 通信模型,每个组件对象管理一个 Socket,并开启一个线程,不适合上述应用场景rn 3、TcpAgent / TcpPullAgent 基于 IOCP 通信模型,一个组件对象管理多个 Socket,适合用作代理服务器或中转服务器的客户端通信组件rn 4、TcpAgent / TcpPullAgent 的使用方式依然简单,提供以下接口方法:rn[code=c]rn/* 1) 通知接口方法:*/rnOnPrepareConnect(CONNID dwConnID, SOCKET socket)rnOnConnect(CONNID dwConnID)rnOnSend(CONNID dwConnID, const BYTE* pData, int iLength)rnOnReceive(CONNID dwConnID, const BYTE* pData, int iLength) //(Push 模型)rnOnReceive(CONNID dwConnID, int iLength) //(Pull 模型)rnOnClose(CONNID dwConnID)rnOnError(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rnOnAgentShutdown()rnrn/* 2) 主要操作方法:*/rnStart(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE)rnStop()rnConnect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)rnSend(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0)rnDisconnect(CONNID dwConnID, BOOL bForce = TRUE)rnFetch(CONNID dwConnID, BYTE* pData, int iLength) //(Pull 模型)rn[/code] 5、增加 TcpAgent / TcpPullAgent 使用示例:rn * Agent-PFMrn * Agent-Pullrn * Agent-4Crn[img=https://img-bbs.csdn.net/upload/201406/05/1401936622_343162.jpg][/img]rn 6、增加 TcpAgent + TcpServer 实现的 HTTP 代理服务器示例:HttpProxyrn[img=https://img-bbs.csdn.net/upload/201406/05/1401936640_775605.jpg][/img]rnrn[b][i]> 增加 HPSocket for Java SDK:[/i][/b]rn-----------------rn 1、提供 Java 开发包:hpsocket-3.2.1.jar(通过 JNA 实现,目前只支持 Windows 平台)rn 2、运行环境:JDK 1.6+,JVM 运行在 server 模式("java -server",在 client 模式下性能受影响)rn 3、MBCS 和 Unicode 版本分布位于包 org.jessma.hpsocket.mbcs 和 org.jessma.hpsocket.unicodern 4、HPSocket for Java SDK 提供以下通信组件:rn[code=text]rn1) TcpServer:TCP 通信服务端组件,支持 PUSH/PULL 模型rn2) TcpClient:TCP 通信客户端组件,支持 PUSH/PULL 模型rn3) TcpAgent :TCP 通信 Agent 组件,支持 PUSH/PULL 模型rn4) UdpServer:UDP 通信服务端组件,支持 PUSH 模型rn5) UdpClient:UDP 通信客户端组件,支持 PUSH 模型rn[/code] 5、HPSocket4J 的使用方法(以 TcpAgent 为例):rn[code=c]rn/* 0: 应用程序加入 hpsocket-3.2.1.jar 和 jna-4.1.0.jar */rnrn/* 1: 创建通信组件对象 */rnTcpAgent agent = TcpAgent.create(Mode.PUSH);rnrn/* 2: 设置回调函数对象 */rn// (可选)rnagent.setCallBackOnPrepareConnect(new OnPrepareConnectImpl());rn// (可选)rnagent.setCallBackOnConnect(new OnConnectImpl());rn// (必须)PUSH 模型需要设置 OnReceive 回调函数对象rnagent.setCallBackOnReceive(new OnReceiveImpl());rn// (必须)PULL 模型需要设置 OnPullReceive 回调函数对象rn// agent.setCallBackOnPullReceive(new OnPullReceiveImpl());rn// (可选)rnagent.setCallBackOnSend(new OnSendImpl());rn// (必须)rnagent.setCallBackOnClose(new OnCloseImpl());rn// (必须)rnagent.setCallBackOnError(new OnErrorImpl());rn// (可选)rnagent.setCallBackOnAgentShutdown(new OnAgentShutdownImpl());rnrn/* 3:启动通信组件 */rnagent.start("127.0.0.1", false);rnrn/* 4:连接服务器 */rnagent.connect("localhost", (short)5555, pdwConnID);rnrn/* 5:处理通信数据 */rn// 响应 OnReceive / OnPullReceive 事件接收数据rn// 使用 agent.send(dwConnID, data, data.length) 发送数据rnrn/* 6:关闭通信组件 */rnagent.stop();rnrn/* 7:销毁通信组件 */rnTcpAgent.destroy(agent);rn[/code] 6、增加示例工程 TestEcho-4J,展示 HPSocket4J 的使用方法(包括 PULL 模型示例和性能测试示例)rn[img=https://img-bbs.csdn.net/upload/201406/05/1401936663_823244.jpg][/img]rnrn[b][i]> 优化数据收发策略:[/i][/b]rn-----------------rn 1、Server 和 Agent 组件提供以下三种数据发送策略:rn[code=text]rn1)PACK - 打包模式(默认):尽量把多个发送操作的数据组合在一起发送,增加传输效率rn2)SAFE - 安全模式:尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出rn3)DIRECT - 直接模式:对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合rn[/code] 2、Server 和 Agent 组件提供以下两种数据接收策略:rn[code=text]rn1)SERIAL - 串行模式(默认):顺序触发同一连接的 OnReceive 和 OnClose/OnError 事件rn2)PARALLEL - 并行模式:在不同的通信线程中同时触发同一连接的 OnReceive 和 OnClose/OnError 事件 rn[/code]------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.3 更新 ***[/color][/size][/b]rn rn[b][i]> 增加其它语言 Demo:[/i][/b]rn-----------------rn 1、C#rn 2、Delphirn 3、E 语言rnrn[b][i]> Bug Fix:[/i][/b]rn-----------------rn 1、修复 IP 地址判断错误 Bugrn 1) 客户端组件连接服务器时,如果服务器 IP 地址满位(12个数字:‘AAA.BBB.CCC.DDD’)则被错误地判断为域名rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn 2、 修复域名或主机名的 IP 地址解析错误 Bugrn 1) 客户端组件通过域名或主机名连接服务器时,可能会解析到错误的 IP 地址rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.2 更新 ***[/color][/size][/b]rn rn[b][i]> 修改 Server 组件的 OnClose() / OnError() 事件的触发规则:[/i][/b]rn-----------------rn 1、以前版本的 TCP/UDP Server 组件中,当关闭一个连接时可能会同时触发一个 OnClose() 事件和若干个 OnError() 事件rn 2、由于存在上述可能性,所以应用程序需要对 OnClose() / OnError() 的处理事件代码段进行同步rn 3、从 v3.1.2 开始,多个 OnClose() / OnError() 事件同时发生时,组件只会向应用通知第一个事件,后续事件则忽略rn 4、应用程序在处理 OnClose() / OnError() 事件时不必处理同步,减少了出错的可能和编写同步及检测代码的负担rn[code=c]rn/* 示例代码一:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // 以前版本:rn // 有可能存在并发的 OnClose()/OnError(),要把代码放在临界区中并检测返回值rn CCriSecLock locallock(m_csPkgInfo); // GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr)rn rn m_Server->SetConnectionExtra(dwConnID, nullptr);rn delete pInfo;rn rnrn rn/* 示例代码二:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // v3.1.2 版本:rn // 只会接收到一个 OnClose()/OnError() 事件,能安全地移除临界区代码和检测代码rn rn PVOID pInfo = nullptr;rn m_Server->GetConnectionExtra(dwConnID, &pInfo);rn ASSERT(pInfo != nullptr);rn rn delete pInfo;rnrn[/code]rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加导出纯 C 函数的动态链接库 HPSocket4C.dll:[/i][/b]rn-----------------rn 1、增加代码文件 HPSocket4C.h 和 HPSocket4C.cpp,用于创建 HPSocket4C.dllrn 2、导出纯 C 函数,让其它语言(如:C/C#/Delphi 等)能方便地使用 HPSocketrn 3、HPSocket4C.dll 使用方法rn[code=text]rn方法一:rn----------------------------------------------------------------------------rn(0) (C/C++ 程序)包含 HPSocket4C.h 头文件rn(1) 调用 ::Create_HP_XxxListener() 函数创建监听器对象rn(2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象rn(3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数rn(4) 调用相关导出函数操作 HPSocket 对象rn(5) ...... ......rn(6) 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象rn(7) 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象rn rn方法二:rn----------------------------------------------------------------------------rn(1) 应用程序把需要用到的导出函数封装到特定语言的包装类中rn(2) 通过包装类封装后,以面向对象的方式使用 HPSocketrn[/code] 4、HPSocket4C.dll 动态链接库发行版本 [code=text]rn (1) x86/HPSocket4C.dll - (32位/MBCS/Release)rn (2) x86/HPSocket4C_D.dll - (32位/MBCS/DeBug)rn (3) x86/HPSocket4C_U.dll - (32位/UNICODE/Release)rn (4) x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug)rn (5) x64/HPSocket4C.dll - (64位/MBCS/Release)rn (6) x64/HPSocket4C_D.dll - (64位/MBCS/DeBug)rn (7) x64/HPSocket4C_U.dll - (64位/UNICODE/Release)rn (8) x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug)rn[/code]------------------------------------------------------------------------------------------------
高性能 TCP & UDP 通信框架 HP-Socket v3.3.1 正式发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn rn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   HP-Socket 作为底层的通用框架,性能是关键指标,绝对不能成为系统的瓶颈。HP-Socket 在设计上充分考虑性能、使用场景、复杂性和易用性等因素,作出以下几点设计决策:rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.3.1 更新 ***[/color][/size][/b]rn rn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、IClientListener 监听器接口用 IClient* 参数取代 CONNID 参数标识 Client 组件对象rn 2、增加 IPullClient 接口,用作 PULL Client 组件的基接口rn 3、IPullSocket 和 IPullClient 接口增加 Peek() 方法用于窥探缓冲区数据(不会移除缓冲区数据)rn 4、增加 IComplexSocketListener 监听器接口,用作 Server/Agent 组件的监听器基接口rn 5、IComplexSocketListener 提供 OnShutdown 通知方法取代 Server/Agent 组件原来的 OnServerShutdown/OnAgentShutdownrn 6、IClient组件增加 Get/SetExtra() 方法用于保存自定义附加数据rn 7、IServer 和 IAgent 组件增加“静默连接处理”相关方法:rn[code=c]rn1) DisconnectSilenceConnections():// 断开超过指定时长的静默连接 rn2) GetSilencePeriod():// 获取某个连接静默时间(毫秒) rn3) SetMarkSilence():// 设置是否标记静默时间 rn4) IsMarkSilence():// 检测是否标记静默时间 rn[/code] [b][i]> 增加 UdpCast 通信组件:[/i][/b]rn-----------------rn 1、UdpClient / UdpServer 用于 C/S 模式的点对点单播通信,但在某些应用场景下,需要用到组播或广播通信rn 2、UdpCast 实现了组播或广播通信,UdpCast 提供 IUdpCast 接口,该接口继承自 IClient,有以下接口方法:rn[code=c]rn/* 1) 通知接口方法: */ rn OnPrepareConnect(IClient* pClient, SOCKET socket) rn OnConnect(IClient* pClient) rn OnSend(IClient* pClient, const BYTE* pData, int iLength) rn OnReceive(IClient* pClient, const BYTE* pData, int iLength) rn OnClose(IClient* pClient) rn OnError(IClient* pClient, EnSocketOperation enOperation, int iErrorCode) rn rn/* 2) 主要操作方法: */ rn Start(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE /*该参数被忽略*/) rn Stop() rn Connect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr) rn Send(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0) rn SendPackets(const WSABUF pBuffers[], int iCount) rn[/code] 3、增加 UdpCast 使用示例:TestUDPCastrn[img=https://img-bbs.csdn.net/upload/201501/27/1422330885_541813.png][/img]rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.3 更新 ***[/color][/size][/b]rn rn[b][i]> common-src 优化:[/i][/b]rn-----------------rn 1、优化通信组件的同步机制rn 2、整体性能提升约 10%rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.2 更新 ***[/color][/size][/b]rn rn[b][i]> 增加若干帮助方法:[/i][/b]rn-----------------rn 1、批量发送方法 SendPackets()[code=text]rn1) IClient/IServer/IAgent 增加方法 SendPackets(pBuffers[], iBufferCount)rn2) 对于 TCP 组件 - 顺序发送所有数据包rn3) 对于 UDP 组件 - 把所有数据包组合成一个数据包发送(总长度不能大于 UDP 包最大长度)rn[/code] 2、小文件发送方法 SendSmallFile() [code=text]rn1) TCP 组件增加方法 SendSmallFile(lpszFileName, pHead, pTail)rn2) 通过 pHead 和 pTail 参数,可以分别在文件数据的头部和尾部加入自定义数据rn3) SendSmallFile() 只能发送 4096 KB 以内大小的文件rn[/code] 3、HPSocket.dll 和 HPSocket4C.dll 增加以下导出方法[code=text]rn1) SYS_WSAGetLastError():调用系统的 WSAGetLastError()rn2) SYS_SetSocketOption():调用系统的 setsockopt()rn3) SYS_GetSocketOption():调用系统的 getsockopt()rn4) SYS_IoctlSocket() :调用系统的 ioctlsocket()rn5) SYS_WSAIoctl() :调用系统的 WSAIoctl()[/code]------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 TcpAgent / TcpPullAgent 通信组件:[/i][/b]rn-----------------rn 1、对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接rn 2、TcpClient / TcpPullClient 基于 Event Select 通信模型,每个组件对象管理一个 Socket,并开启一个线程,不适合上述应用场景rn 3、TcpAgent / TcpPullAgent 基于 IOCP 通信模型,一个组件对象管理多个 Socket,适合用作代理服务器或中转服务器的客户端通信组件rn 4、TcpAgent / TcpPullAgent 的使用方式依然简单,提供以下接口方法:rn[code=c]rn/* 1) 通知接口方法:*/rnOnPrepareConnect(CONNID dwConnID, SOCKET socket)rnOnConnect(CONNID dwConnID)rnOnSend(CONNID dwConnID, const BYTE* pData, int iLength)rnOnReceive(CONNID dwConnID, const BYTE* pData, int iLength) //(Push 模型)rnOnReceive(CONNID dwConnID, int iLength) //(Pull 模型)rnOnClose(CONNID dwConnID)rnOnError(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rnOnAgentShutdown()rnrn/* 2) 主要操作方法:*/rnStart(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE)rnStop()rnConnect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)rnSend(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0)rnDisconnect(CONNID dwConnID, BOOL bForce = TRUE)rnFetch(CONNID dwConnID, BYTE* pData, int iLength) //(Pull 模型)rn[/code] 5、增加 TcpAgent / TcpPullAgent 使用示例:rn * Agent-PFMrn * Agent-Pullrn * Agent-4Crn[img=https://img-bbs.csdn.net/upload/201406/05/1401936622_343162.jpg][/img]rn 6、增加 TcpAgent + TcpServer 实现的 HTTP 代理服务器示例:HttpProxyrn[img=https://img-bbs.csdn.net/upload/201406/05/1401936640_775605.jpg][/img]rnrn[b][i]> 增加 HPSocket for Java SDK:[/i][/b]rn-----------------rn 1、提供 Java 开发包:hpsocket-3.2.1.jar(通过 JNA 实现,目前只支持 Windows 平台)rn 2、运行环境:JDK 1.6+,JVM 运行在 server 模式("java -server",在 client 模式下性能受影响)rn 3、MBCS 和 Unicode 版本分布位于包 org.jessma.hpsocket.mbcs 和 org.jessma.hpsocket.unicodern 4、HPSocket for Java SDK 提供以下通信组件:rn[code=text]rn1) TcpServer:TCP 通信服务端组件,支持 PUSH/PULL 模型rn2) TcpClient:TCP 通信客户端组件,支持 PUSH/PULL 模型rn3) TcpAgent :TCP 通信 Agent 组件,支持 PUSH/PULL 模型rn4) UdpServer:UDP 通信服务端组件,支持 PUSH 模型rn5) UdpClient:UDP 通信客户端组件,支持 PUSH 模型rn[/code] 5、HPSocket4J 的使用方法(以 TcpAgent 为例):rn[code=c]rn/* 0: 应用程序加入 hpsocket-3.2.1.jar 和 jna-4.1.0.jar */rnrn/* 1: 创建通信组件对象 */rnTcpAgent agent = TcpAgent.create(Mode.PUSH);rnrn/* 2: 设置回调函数对象 */rn// (可选)rnagent.setCallBackOnPrepareConnect(new OnPrepareConnectImpl());rn// (可选)rnagent.setCallBackOnConnect(new OnConnectImpl());rn// (必须)PUSH 模型需要设置 OnReceive 回调函数对象rnagent.setCallBackOnReceive(new OnReceiveImpl());rn// (必须)PULL 模型需要设置 OnPullReceive 回调函数对象rn// agent.setCallBackOnPullReceive(new OnPullReceiveImpl());rn// (可选)rnagent.setCallBackOnSend(new OnSendImpl());rn// (必须)rnagent.setCallBackOnClose(new OnCloseImpl());rn// (必须)rnagent.setCallBackOnError(new OnErrorImpl());rn// (可选)rnagent.setCallBackOnAgentShutdown(new OnAgentShutdownImpl());rnrn/* 3:启动通信组件 */rnagent.start("127.0.0.1", false);rnrn/* 4:连接服务器 */rnagent.connect("localhost", (short)5555, pdwConnID);rnrn/* 5:处理通信数据 */rn// 响应 OnReceive / OnPullReceive 事件接收数据rn// 使用 agent.send(dwConnID, data, data.length) 发送数据rnrn/* 6:关闭通信组件 */rnagent.stop();rnrn/* 7:销毁通信组件 */rnTcpAgent.destroy(agent);rn[/code] 6、增加示例工程 TestEcho-4J,展示 HPSocket4J 的使用方法(包括 PULL 模型示例和性能测试示例)rn[img=https://img-bbs.csdn.net/upload/201406/05/1401936663_823244.jpg][/img]rnrn[b][i]> 优化数据收发策略:[/i][/b]rn-----------------rn 1、Server 和 Agent 组件提供以下三种数据发送策略:rn[code=text]rn1)PACK - 打包模式(默认):尽量把多个发送操作的数据组合在一起发送,增加传输效率rn2)SAFE - 安全模式:尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出rn3)DIRECT - 直接模式:对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合rn[/code] 2、Server 和 Agent 组件提供以下两种数据接收策略:rn[code=text]rn1)SERIAL - 串行模式(默认):顺序触发同一连接的 OnReceive 和 OnClose/OnError 事件rn2)PARALLEL - 并行模式:在不同的通信线程中同时触发同一连接的 OnReceive 和 OnClose/OnError 事件 rn[/code]------------------------------------------------------------------------------------------------
高性能 TCP & UDP 通信框架 HP-Socket v3.2.2 正式发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn rn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   HP-Socket 作为底层的通用框架,性能是关键指标,绝对不能成为系统的瓶颈。HP-Socket 在设计上充分考虑性能、使用场景、复杂性和易用性等因素,作出以下几点设计决策:rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.2 更新 ***[/color][/size][/b]rn rn[b][i]> 增加若干帮助方法:[/i][/b]rn-----------------rn 1、批量发送方法 SendPackets()[code=text]rn1) IClient/IServer/IAgent 增加方法 SendPackets(pBuffers[], iBufferCount)rn2) 对于 TCP 组件 - 顺序发送所有数据包rn3) 对于 UDP 组件 - 把所有数据包组合成一个数据包发送(总长度不能大于 UDP 包最大长度)rn[/code] 2、小文件发送方法 SendSmallFile() [code=text]rn1) TCP 组件增加方法 SendSmallFile(lpszFileName, pHead, pTail)rn2) 通过 pHead 和 pTail 参数,可以分别在文件数据的头部和尾部加入自定义数据rn3) SendSmallFile() 只能发送 4096 KB 以内大小的文件rn[/code] 3、HPSocket.dll 和 HPSocket4C.dll 增加以下导出方法[code=text]rn1) SYS_WSAGetLastError():调用系统的 WSAGetLastError()rn2) SYS_SetSocketOption():调用系统的 setsockopt()rn3) SYS_GetSocketOption():调用系统的 getsockopt()rn4) SYS_IoctlSocket() :调用系统的 ioctlsocket()rn5) SYS_WSAIoctl() :调用系统的 WSAIoctl()[/code]rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 TcpAgent / TcpPullAgent 通信组件:[/i][/b]rn-----------------rn 1、对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接rn 2、TcpClient / TcpPullClient 基于 Event Select 通信模型,每个组件对象管理一个 Socket,并开启一个线程,不适合上述应用场景rn 3、TcpAgent / TcpPullAgent 基于 IOCP 通信模型,一个组件对象管理多个 Socket,适合用作代理服务器或中转服务器的客户端通信组件rn 4、TcpAgent / TcpPullAgent 的使用方式依然简单,提供以下接口方法:rn[code=c]rn/* 1) 通知接口方法:*/rnOnPrepareConnect(CONNID dwConnID, SOCKET socket)rnOnConnect(CONNID dwConnID)rnOnSend(CONNID dwConnID, const BYTE* pData, int iLength)rnOnReceive(CONNID dwConnID, const BYTE* pData, int iLength) //(Push 模型)rnOnReceive(CONNID dwConnID, int iLength) //(Pull 模型)rnOnClose(CONNID dwConnID)rnOnError(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rnOnAgentShutdown()rnrn/* 2) 主要操作方法:*/rnStart(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE)rnStop()rnConnect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)rnSend(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0)rnDisconnect(CONNID dwConnID, BOOL bForce = TRUE)rnFetch(CONNID dwConnID, BYTE* pData, int iLength) //(Pull 模型)rn[/code] 5、增加 TcpAgent / TcpPullAgent 使用示例:rn * Agent-PFMrn * Agent-Pullrn * Agent-4Crn[img=https://img-bbs.csdn.net/upload/201406/05/1401936622_343162.jpg][/img]rn 6、增加 TcpAgent + TcpServer 实现的 HTTP 代理服务器示例:HttpProxyrn[img=https://img-bbs.csdn.net/upload/201406/05/1401936640_775605.jpg][/img]rnrn[b][i]> 增加 HPSocket for Java SDK:[/i][/b]rn-----------------rn 1、提供 Java 开发包:hpsocket-3.2.1.jar(通过 JNA 实现,目前只支持 Windows 平台)rn 2、运行环境:JDK 1.6+,JVM 运行在 server 模式("java -server",在 client 模式下性能受影响)rn 3、MBCS 和 Unicode 版本分布位于包 org.jessma.hpsocket.mbcs 和 org.jessma.hpsocket.unicodern 4、HPSocket for Java SDK 提供以下通信组件:rn[code=text]rn1) TcpServer:TCP 通信服务端组件,支持 PUSH/PULL 模型rn2) TcpClient:TCP 通信客户端组件,支持 PUSH/PULL 模型rn3) TcpAgent :TCP 通信 Agent 组件,支持 PUSH/PULL 模型rn4) UdpServer:UDP 通信服务端组件,支持 PUSH 模型rn5) UdpClient:UDP 通信客户端组件,支持 PUSH 模型rn[/code] 5、HPSocket4J 的使用方法(以 TcpAgent 为例):rn[code=c]rn/* 0: 应用程序加入 hpsocket-3.2.1.jar 和 jna-4.1.0.jar */rnrn/* 1: 创建通信组件对象 */rnTcpAgent agent = TcpAgent.create(Mode.PUSH);rnrn/* 2: 设置回调函数对象 */rn// (可选)rnagent.setCallBackOnPrepareConnect(new OnPrepareConnectImpl());rn// (可选)rnagent.setCallBackOnConnect(new OnConnectImpl());rn// (必须)PUSH 模型需要设置 OnReceive 回调函数对象rnagent.setCallBackOnReceive(new OnReceiveImpl());rn// (必须)PULL 模型需要设置 OnPullReceive 回调函数对象rn// agent.setCallBackOnPullReceive(new OnPullReceiveImpl());rn// (可选)rnagent.setCallBackOnSend(new OnSendImpl());rn// (必须)rnagent.setCallBackOnClose(new OnCloseImpl());rn// (必须)rnagent.setCallBackOnError(new OnErrorImpl());rn// (可选)rnagent.setCallBackOnAgentShutdown(new OnAgentShutdownImpl());rnrn/* 3:启动通信组件 */rnagent.start("127.0.0.1", false);rnrn/* 4:连接服务器 */rnagent.connect("localhost", (short)5555, pdwConnID);rnrn/* 5:处理通信数据 */rn// 响应 OnReceive / OnPullReceive 事件接收数据rn// 使用 agent.send(dwConnID, data, data.length) 发送数据rnrn/* 6:关闭通信组件 */rnagent.stop();rnrn/* 7:销毁通信组件 */rnTcpAgent.destroy(agent);rn[/code] 6、增加示例工程 TestEcho-4J,展示 HPSocket4J 的使用方法(包括 PULL 模型示例和性能测试示例)rn[img=https://img-bbs.csdn.net/upload/201406/05/1401936663_823244.jpg][/img]rnrn[b][i]> 优化数据收发策略:[/i][/b]rn-----------------rn 1、Server 和 Agent 组件提供以下三种数据发送策略:rn[code=text]rn1)PACK - 打包模式(默认):尽量把多个发送操作的数据组合在一起发送,增加传输效率rn2)SAFE - 安全模式:尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出rn3)DIRECT - 直接模式:对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合rn[/code] 2、Server 和 Agent 组件提供以下两种数据接收策略:rn[code=text]rn1)SERIAL - 串行模式(默认):顺序触发同一连接的 OnReceive 和 OnClose/OnError 事件rn2)PARALLEL - 并行模式:在不同的通信线程中同时触发同一连接的 OnReceive 和 OnClose/OnError 事件 rn[/code]------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.3 更新 ***[/color][/size][/b]rn rn[b][i]> 增加其它语言 Demo:[/i][/b]rn-----------------rn 1、C#rn 2、Delphirn 3、E 语言rnrn[b][i]> Bug Fix:[/i][/b]rn-----------------rn 1、修复 IP 地址判断错误 Bugrn 1) 客户端组件连接服务器时,如果服务器 IP 地址满位(12个数字:‘AAA.BBB.CCC.DDD’)则被错误地判断为域名rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn 2、 修复域名或主机名的 IP 地址解析错误 Bugrn 1) 客户端组件通过域名或主机名连接服务器时,可能会解析到错误的 IP 地址rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.2 更新 ***[/color][/size][/b]rn rn[b][i]> 修改 Server 组件的 OnClose() / OnError() 事件的触发规则:[/i][/b]rn-----------------rn 1、以前版本的 TCP/UDP Server 组件中,当关闭一个连接时可能会同时触发一个 OnClose() 事件和若干个 OnError() 事件rn 2、由于存在上述可能性,所以应用程序需要对 OnClose() / OnError() 的处理事件代码段进行同步rn 3、从 v3.1.2 开始,多个 OnClose() / OnError() 事件同时发生时,组件只会向应用通知第一个事件,后续事件则忽略rn 4、应用程序在处理 OnClose() / OnError() 事件时不必处理同步,减少了出错的可能和编写同步及检测代码的负担rn[code=c]rn/* 示例代码一:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // 以前版本:rn // 有可能存在并发的 OnClose()/OnError(),要把代码放在临界区中并检测返回值rn CCriSecLock locallock(m_csPkgInfo); // GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr)rn rn m_Server->SetConnectionExtra(dwConnID, nullptr);rn delete pInfo;rn rnrn rn/* 示例代码二:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // v3.1.2 版本:rn // 只会接收到一个 OnClose()/OnError() 事件,能安全地移除临界区代码和检测代码rn rn PVOID pInfo = nullptr;rn m_Server->GetConnectionExtra(dwConnID, &pInfo);rn ASSERT(pInfo != nullptr);rn rn delete pInfo;rnrn[/code]rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加导出纯 C 函数的动态链接库 HPSocket4C.dll:[/i][/b]rn-----------------rn 1、增加代码文件 HPSocket4C.h 和 HPSocket4C.cpp,用于创建 HPSocket4C.dllrn 2、导出纯 C 函数,让其它语言(如:C/C#/Delphi 等)能方便地使用 HPSocketrn 3、HPSocket4C.dll 使用方法rn[code=text]rn方法一:rn----------------------------------------------------------------------------rn(0) (C/C++ 程序)包含 HPSocket4C.h 头文件rn(1) 调用 ::Create_HP_XxxListener() 函数创建监听器对象rn(2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象rn(3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数rn(4) 调用相关导出函数操作 HPSocket 对象rn(5) ...... ......rn(6) 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象rn(7) 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象rn rn方法二:rn----------------------------------------------------------------------------rn(1) 应用程序把需要用到的导出函数封装到特定语言的包装类中rn(2) 通过包装类封装后,以面向对象的方式使用 HPSocketrn[/code] 4、HPSocket4C.dll 动态链接库发行版本 [code=text]rn (1) x86/HPSocket4C.dll - (32位/MBCS/Release)rn (2) x86/HPSocket4C_D.dll - (32位/MBCS/DeBug)rn (3) x86/HPSocket4C_U.dll - (32位/UNICODE/Release)rn (4) x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug)rn (5) x64/HPSocket4C.dll - (64位/MBCS/Release)rn (6) x64/HPSocket4C_D.dll - (64位/MBCS/DeBug)rn (7) x64/HPSocket4C_U.dll - (64位/UNICODE/Release)rn (8) x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug)rn[/code]------------------------------------------------------------------------------------------------
高性能 TCP & UDP 通信框架 HP-Socket v3.4.1 正式发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/<em>hp-socket</em>/doc[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn   3、HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。rnrn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.4.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 Tcp Pack 系列通信组件:[/i][/b]rn-----------------rn 1、Tcp Pack 系列组件保证每个 OnReceive 事件都向应用程序提供一个完整数据包rn 2、Tcp Pack 系列组件是 PUSH/PULL 模式的结合体,应用程序不必处理分包(如:PUSH)与数据抓取(如:PULL)rn 3、Tcp Pack 系列组件提供 Get/SetMaxPackSize() 和 Get/SetPackHeaderFlag() 方法,用来设置最大包长和包头标识rn 4、CTcpPackServer 实现 ITcpServer 接口,CTcpPackAgent 实现 ITcpAgent 接口,CTcpPackClient 实现 ITcpClient 接口rn[img=https://img-bbs.csdn.net/upload/201603/27/1459080805_239193.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、OnClose/OnError 合并为一个通信事件: OnClose(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rn 2、枚举类型 EnSocketOperation 增加一个枚举值: SO_CLOSE = 5,标识关闭 Socket 操作rn 3、IServer 和 IAgent 接口删除接口方法: Get/SetRecvPolicy()rn 4、IServer 和 IAgent 接口删除接口方法: Get/SetMaxShutdownWaitTime()rn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v3.3.2 更新 ***[/color][/size][/b]rn rn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、IClientListener 监听器接口用 IClient* 参数取代 CONNID 参数标识 Client 组件对象rn 2、增加 IPullClient 接口,用作 PULL Client 组件的基接口rn 3、IPullSocket 和 IPullClient 接口增加 Peek() 方法用于窥探缓冲区数据(不会移除缓冲区数据)rn 4、增加 IComplexSocketListener 监听器接口,用作 Server/Agent 组件的监听器基接口rn 5、IComplexSocketListener 提供 OnShutdown 通知方法取代 Server/Agent 组件原来的 OnServerShutdown/OnAgentShutdownrn 6、IClient组件增加 Get/SetExtra() 方法用于保存自定义附加数据rn 7、IServer 和 IAgent 组件增加“静默连接处理”相关方法:[code=c]rn1) DisconnectSilenceConnections():// 断开超过指定时长的静默连接 rn2) GetSilencePeriod():// 获取某个连接静默时间(毫秒) rn3) SetMarkSilence():// 设置是否标记静默时间 rn4) IsMarkSilence():// 检测是否标记静默时间[/code][b][i]> 增加 UdpCast 通信组件:[/i][/b]rn-----------------rn 1、UdpClient / UdpServer 用于 C/S 模式的点对点单播通信,但在某些应用场景下,需要用到组播或广播通信rn 2、UdpCast 实现了组播或广播通信,UdpCast 提供 IUdpCast 接口,该接口继承自 IClient,有以下接口方法: [code=c]/* 1) 通知接口方法: */ rnOnPrepareConnect(IClient* pClient, SOCKET socket) rnOnConnect(IClient* pClient) rnOnSend(IClient* pClient, const BYTE* pData, int iLength) rnOnReceive(IClient* pClient, const BYTE* pData, int iLength) rnOnClose(IClient* pClient) rnOnError(IClient* pClient, EnSocketOperation enOperation, int iErrorCode) rn rn/* 2) 主要操作方法: */ rnStart(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE /*该参数被忽略*/) rnStop() rnConnect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr) rnSend(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0) rnSendPackets(const WSABUF pBuffers[], int iCount) [/code] 3、增加 UdpCast 使用示例:TestUDPCastrn[img=https://img-bbs.csdn.net/upload/201501/27/1422330885_541813.png][/img]rn------------------------------------------------------------------------------------------------
高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1 发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn[color=#800000]  HP-Socket 是一套通用的<em>高性能</em> TCP/UDP/HTTP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/<em>hp-socket</em>/doc[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]【通用性】[/size][/b]rn   1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。rn   2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。rn rn[b][size=14px]【易用性】[/size][/b]rn   1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。rn   2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。rn   3、HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。rnrn[b][size=14px]【<em>高性能</em>】[/size][/b]rn   [b]Client 组件:[/b]基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。rn   [b]Server 组件:[/b]基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。rn   [b]Agent 组件:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]【伸缩性】[/size][/b]rn   应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v4.0.1 更新 ***[/color][/size][/b]rnrn[b][i]> 增加 HTTP 系列通信组件:[/i][/b]rn----------------- rn[img=https://img-bbs.csdn.net/upload/201610/08/1475857393_73495.png][/img]rn[img=https://img-bbs.csdn.net/upload/201610/08/1475857418_443165.png][/img]rn 1、新增 HTTP Server 组件:rn 1) 组件类: CHttpServer、CHttpsServerrn 2) 实现接口: ITcpServer / IComplexHttpResponderrn 3) 监听器接口: IHttpServerListenerrn 2、新增 HTTP Agent 组件:rn 1) 组件类: CHttpAgent、CHttpsAgentrn 2) 实现接口: ITcpAgent / IComplexHttpRequesterrn 3) 监听器接口: IHttpAgentListenerrn 3、新增 HTTP Client 组件:rn 1) 组件类: CHttpClient、CHttpsClientrn 2) 实现接口: ITcpClient / IHttpRequesterrn 3) 监听器接口: IHttpClientListenerrn 4、新增 HTTP 示例 Demo:rn 1) TestEcho-Http (源代码)rn 2) TestEcho-Http-4C (4C LIB / 4C DLL)rn 5、Http 监听器:rn 1) 监听器事件:[code=text]OnMessageBegin() : 【可选】开始解析rnOnRequestLine() : 【可选】请求行解析完成(仅用于 HTTP 服务端)rnOnStatusLine() : 【可选】状态行解析完成(仅用于 HTTP 客户端)rnOnHeader() : 【可选】请求头通知rnOnHeadersComplete() : 【必须】请求头完成通知rnOnBody() : 【必须】请求体报文通知rnOnChunkHeader() : 【可选】Chunked 报文头通知rnOnChunkComplete() : 【可选】Chunked 报文结束通知rnOnMessageComplete() : 【必须】完成解析通知rnOnUpgrade() : 【可选】升级协议通知rnOnParseError() : 【必须】解析错误通知[/code] 2) 监听器事件返回值(EnHttpParseResult):rn[code=text]HPR_OK : 继续解析rnHPR_SKIP_BODY : 跳过当前请求 BODY(仅用于 OnHeadersComplete 事件)rnHPR_UPGRADE : 升级协议(仅用于 OnHeadersComplete 事件)rnHPR_ERROR : 终止解析,断开连接[/code][b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、IServer 和 IAgent 组件的所有监听器回调方法增加‘事件源’参数,如:OnShutdown() -> OnShutdown(T* pSender)rn 2、IClient 组件的所有监听器回调方法增加‘连接ID’参数,如:OnHandShake(IClient* pClient) -> OnHandShake(T* pSender, CONNID dwConnID)rn 3、IServer 和 IAgent 接口增加接口方法: Get/SetMaxConnectionCount() 用于设置最大连接数,最大连接数默认:10000rn 4、OnHandShake() 事件触发规则调整:非 SSL 组件在 OnConnect() 事件后也触发 OnHandShake() 事件,使 SSL 组件和 SSL 组件处理流程一致rn 5、HPSocket4C 增加 PACK 组件监听器的创建、销毁方法,新版本必须使用下列方法创建、销毁 PACK 组件监听器:rn 1) Create_HP_TcpPackServerListener / Destroy_HP_TcpPackServerListenerrn 2) Create_HP_TcpPackAgentListener / Destroy_HP_TcpPackAgentListenerrn 3) Create_HP_TcpPackClientListener / Destroy_HP_TcpPackClientListenerrn 6、SSL 组件支持 SNIrn 1) SSL 初始化方法 HP_SSL_Initialize(),增加 SNI 回调函数指针参数rn 2) 新增方法 HP_SSL_AddServerContext(),用于 加载 SNI 主机证书rnrn[b][i]> 其他更新:[/i][/b]rn-----------------rn 1、IServer 和 IAgent 组件采用 Ring Pool 取代 R/W Lock + Map 维护活动连接,提升读写和并发性能rn 2、更新所有 Demo 示例代码rnrn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.5.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 SSL 系列通信组件:[/i][/b]rn-----------------rn 1、新增 SSL PUSH 组件:CSSLServer、CSSLAgent、CSSLClientrn 2、新增 SSL PULL 组件:CSSLPullServer、CSSLPullAgent、CSSLPullClientrn 3、新增 SSL PACK 组件:CSSLPackServer、CSSLPackAgent、CSSLPackClientrn 4、SSL Server 实现 ITcpServer 接口,SSL Agent 实现 ITcpAgent 接口,SSL Client 实现 ITcpClient 接口rn 5、启动 SSL 通信组件前需要调用 HP_SSL_Initialize() 函数初始化 SSL 全局环境参数rn 6、通信结束后调用 HP_SSL_Cleanup() 函数清理 SSL 全局运行环境rn 7、新增 SSL 相关示例 Demo:rn 1) TestEcho-SSL (源代码)rn 2) TestEcho-SSL-Pack (DLL / 4C DLL)rn 3) TestEcho-SSL-4C (4C LIB)rn 4) TestEcho-SSL-PFM (LIB)rn[img=https://img-bbs.csdn.net/upload/201605/23/1463992712_737233.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、ITcpServerListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 2、ITcpAgentListener 接口增加 SSL 握手成功事件:OnHandShake(CONNID dwConnID)rn 3、ITcpClientListener 接口增加 SSL 握手成功事件:OnHandShake(IClient* pClient)rn 4、枚举类型 EnSocketError 增加‘SSL 环境未就绪’错误代码 SE_SSL_ENV_NOT_READYrn 5、增加枚举类型:EnSSLSessionMode(SSL 工作模式),EnSSLVerifyMode(SSL 验证模式)rn 6、HPSocket-SSL DLL 主要头文件:SocketInterface-SSL.h,HPSocket-SSL.hrn 7、HPSocket4C-SSL DLL 主要头文件:HPSocket4C-SSL.hrn 8、Tcp Pack 系列组件可设置的最大包长调整为 4194303/0x3FFFFF 字节rn 9、Tcp Pack 系列组件的有效包头标识取值范围调整为 0 ~ 1023/0x3FFrnrn[b][i]> 增加静态库工程:[/i][/b]rn-----------------rn 1、新增项目工程 HPSocketLIB 和 HPSocketLIB4C 用于编译 HPSocket 和 HPSocket4C 静态库rn 2、静态库与动态库的使用方式一致(请参考示例 Demo:TestEcho-SSL-4C 和 TestEcho-SSL-PFM)rn 3、使用 HPSocket 或 HPSocket4C 静态库时,需要在工程属性中定义预处理宏 -> HPSOCKET_STATIC_LIBrn 4、静态库目标文件不包含在发布包中(因为太大),如果需要请自行编译rn------------------------------------------------------------------------------------------------rnrn[b][size=16px][color=#0000FF]*** v3.4.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 Tcp Pack 系列通信组件:[/i][/b]rn-----------------rn 1、Tcp Pack 系列组件保证每个 OnReceive 事件都向应用程序提供一个完整数据包rn 2、Tcp Pack 系列组件是 PUSH/PULL 模式的结合体,应用程序不必处理分包(如:PUSH)与数据抓取(如:PULL)rn 3、Tcp Pack 系列组件提供 Get/SetMaxPackSize() 和 Get/SetPackHeaderFlag() 方法,用来设置最大包长和包头标识rn 4、CTcpPackServer 实现 ITcpServer 接口,CTcpPackAgent 实现 ITcpAgent 接口,CTcpPackClient 实现 ITcpClient 接口rn[img=https://img-bbs.csdn.net/upload/201610/12/1476242688_133695.jpg][/img]rnrn[b][i]> 组件接口调整:[/i][/b]rn-----------------rn 1、OnClose/OnError 合并为一个通信事件: OnClose(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rn 2、枚举类型 EnSocketOperation 增加一个枚举值: SO_CLOSE = 5,标识关闭 Socket 操作rn 3、IServer 和 IAgent 接口删除接口方法: Get/SetRecvPolicy()rn 4、IServer 和 IAgent 接口删除接口方法: Get/SetMaxShutdownWaitTime()rn------------------------------------------------------------------------------------------------
mina apach 网络通信框架高性能例子
mina apach <em>网络</em><em>通信框架</em><em>高性能</em>例子
HP-Socket TCP & UDP 通信框架开发指南 5.0
HP-Socket TCP & UDP <em>通信框架</em>开发指南 V5.0-20170801 HP-Socket TCP & UDP <em>通信框架</em>开发指南 V5.0-20170801
跨平台高性能内存数据库介绍
rnrn1 概述rnCache Server内存数据库是目前业内运行速度最快,功能最强大的内存数据库系统。产品定位于内存数据库系统和提供高端<em>高性能</em>系统的开发、处理平台。rnrn另外Cache Server拥有强大的编程能力,拥有业内功能最强大的内存数据库脚本,使Cache Server不只作为数据的高速缓存服务器,更能够实现复杂的业务逻辑,通过编写数据库脚本和存储过程实现以前通过C/C++编程才能实现的强大功能。rnrn2 版权说明rn1、 本软件为免费软件,用户可用于学习、测试、商业用途,本软件没有功能上的限制和使用期限限制,可自由复制、传播。rnrn2、 用户可发邮件到Freeland007@163.com 向作者获取最新版本。欢迎用户朋友rn对本软件提出宝 贵意见,作者会及时修改软件的BUG,并对软件进行持续的rn改进。rn3 产品技术特点rn3.1 系统结构简介rnCache Server在设计上参照目前主流数据库MS SQL SERVER(Sybase)的结构特点。rnrnCache Server由数据库、系统用户、远程连接、复制等对象组成,每个数据库由数据库表、存储过程、索引等对象组成。rnrn其中数据表支持多个索引,支持单列唯一索引、单列非唯一索引、多列复合唯一索引、多列复合非唯一索引。支持精确查询、模糊查询、分组查询、排序等功能。rn3.2 运行效率高rnrn3.3 良好的缓冲机制rn3.4 性能稳定rn3.5 高可用性rn3.6 可维护性rn3.7 支持同步、异步访问方式rnCache Server支持客户端的同步访问方式和异步访问方式。rnrn3.8 支持Cache SQL脚本rnCache Server支持功能强大的Cache SQL脚本,该脚本是结构化的编程语言,风格和功能上兼容MS SQL SERVER(或Sybase)的Transact SQL。rnrnCache SQL语言有如下功能:rn1) 支持全局变量、局部变量、会话变量、存储过程参数rn2) 支持调用存储过程,调用存储过程支持输入参数、输出参数。rn3) 支持调用远程存储过程,调用远程存储过程支持输入参数、输出参数。rn4) 支持if、else if、else选择结构,以及if、else if、else嵌套rn5) 支持while循环以及嵌套,支持break、continue语句rn6) 支持数字计算、字符串、关系运算、逻辑运算、位运算、单元运算等rn7) 支持任意复杂的表达式rn8) 支持数据表操作语句rn(1)selectrn2)delete rn3)update rn4)insertrn5)matchrn6)group byrn7)havingrn8)order by rn rn9) 支持数据库对象操作语句rncreate database、drop database、use database、rncreate user、drop user、rncreate table、drop table、create index、drop indexrncreate procedure、drop procedurern等语句。rnrn10)支持游标操作rnrnrn10) 支持执行动态SQL语句rnrnrn10)支持返回多个结果集、打印信息、影响条数、输出参数值等信息rnrn13)支持调用远程存储过程,即一个Cache Server的存储过程可以调用另外rn 一个Cache Server实例中的存储过程。rn rn14)批量数据导入rn1) import语句rn2) select into 方式rnrn15)批量数据导出rnexport语句rnrn16)访问传统关系数据库(MS SQL SERVER、Oracle等)rn在Cache Server上定义外部数据源,在Cache SQL脚本中可以调用MS SQL SERVER(或Oracle等)的存储过程,在Cache SQL的调用语句中rnrn17)支持丰富的功能函数rnrn3.9 支持存储过程rnCache Server可以在服务端保存用户编写的存储过程rn1、 存储过程支持输入输出参数,最大支持1024个参数rn2、 存储过程中可以定义局部变量,引用全局变量和会话变量。可以使用任意合法的SQL语句。rn3、 存储过程可以返回一个或多个结果集rn4、 存储过程内可以调用其它的存储过程,形成嵌套调用,调用自身则形成递归调用rn5、 存储过程可以调用远程存储过程rn6、 可以执行动态SQL语句rn7、 可以调用动态库rn8、 可以和磁盘数据库进行交互rn9、 支持临时存储过程和全局临时存储过程rn10、 存储过程脚本的大小没有限制rn11、 一个数据库内存储过程的数量没有限制rn12、 支持延迟名称解析和编译rnrn3.10 支持调用远程存储过程rnCache Server在执行SQL脚本的时候可以调用其它Cache Server的存储过程,执行远程存储过程可以带参数,支持参数的输入和输出,通过在脚本中调用远程存储过程实现分布式计算,可以利用该机制实现数据的同步和双机机制。rnrn示例:rn declare @sex tinyintrndeclare @name char(16)rndeclare @age smallint rndeclare @address char(128) rndeclare @email char(128)rndeclare @ret int rn rnrpc remote.getpersoninfo '123456789012345670', @sex, @name, @age, rn@address, @email, @retrn rn print itos(@sex, 10) + ':' + @name + ':' + itos(@age, 10) + ':' + rn @address + ':' + @email + ':' + itos(@sex, 10)rn rn 其中 rpc为远程调用关键词, remote为远程服务器, getpersoninfo为远程服rn 务器上的存储过程。rnrn3.11 支持调用动态链接库rn用户根据如果需要特殊的功能,可以根据Cache Server的调用动态库的规范自行开发动态库,在Cache SQL脚本中可以加载、卸载动态库,并可以执行动态库中的函数,执行函数可以输入、输出参数。rnrn示例:rn1、 加载动态库rnrndeclare @handle bigintrnselect @handle = LoadLibrary(@DllPath)rnrn2、 卸载动态库rnrndeclare @ret intrn select @ret = FreeLibrary(@handle)rnrn3、 调用函数rnrndeclare @fp bigintrnselect fp = GetProcAddress(@handle, @FunctionName)rnexec dll fp para0, para1,para2 outputrnrn3.12 支持与持久数据库进行交互rnCache Server在执行脚本的过程中可以于传统磁盘数据库(MS SQL SERVER、Oracle等)进行交互,Cache Server提供2种方式和磁盘数据库进行交互:rn1、同步方式rn2、异步方式rn rn3.13 支持操作系统的APIrn3.14 系统开发简单rn基于Cache Server的开发分为两部分:服务端开发和客户端开发。rnrn服务端侧开发:rn服务端开发是利用Cache Server的Cache SQL脚本编写存储过程,由客户端调用,Cache SQL简单易用,容易掌握。rnrn客户端侧开发:rn客户端侧开发是利用宿主语言(C、C++、VB、delphi、Java等语言)基于协议或者API调用Cache SQL脚本或存储过程,并解析返回的结果。一般情况下推荐在客户端调用存储过程,由存储过程实现业务逻辑。调用存储过程可以传递输入参数,执行完毕后返回输出参数和结果集。rnrn基于Cache Server的开发相对其它数据库更简单方便rn1、 脚本兼容MS SQL SERVER的Transact-SQLrn2、 客户端的API精简,只开发有实际用途的接口rn3、 没有复杂的概念,通俗易懂rnrn4 Cache Server<em>网络</em>内存数据库应用领域rnCache Server <em>网络</em>内存数据库可应用于多个行业领域,适合于高速处理大量事务的应用情况。rnrn4.1 电信增值业务rn1、 短信违禁词过滤rn2、 电话黑、白名单处理rn3、 ISMP系统rn4.2 电信核心系统rn1、 CRM系统rn2、 BOSS系统rn3、 定位系统rn4、 综合业务系统管理rn5、 鉴权系统rn6、 计费系统rn7、 HLR、VLR系统rnrn4.3 互联网应用rn1、 大规模用户访问的服务器rn2、 高效数据库缓存服务器rn3、 电子商务交易处理rn4、 产品编码查询rn5、 身份查询rn6、 <em>网络</em>游戏服务器rnrn4.4 实时处理系统rn1、 实时监控系统rn2、 数据采集系统rn3、 跟踪系统rn
通用高性能 Windows Socket 组件 HP-Socket
HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。
高性能 Socket 组件 HP-Socket v3.1.3 正式发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn  [color=#800000]HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。[/color]rn rn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]通用性[/size][/b]rn   通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn 与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rn rn[b][size=14px]可用性[/size][/b]rn   可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rn rn[b][size=14px]<em>高性能</em>[/size][/b]rn   作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn   [b]客户端:[/b]在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn   [b]服务端:[/b]采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rn rn[b][size=14px]伸缩性[/size][/b]rn   可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.3 更新 ***[/color][/size][/b]rn rn[b][i]> 增加其它语言 Demo:[/i][/b]rn-----------------rn 1、C#rn 2、Delphirn 3、E 语言rnrn[b][i]> Bug Fix:[/i][/b]rn-----------------rn 1、修复 IP 地址判断错误 Bugrn 1) 客户端组件连接服务器时,如果服务器 IP 地址满位(12个数字:‘AAA.BBB.CCC.DDD’)则被错误地判断为域名rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn 2、 修复域名或主机名的 IP 地址解析错误 Bugrn 1) 客户端组件通过域名或主机名连接服务器时,可能会解析到错误的 IP 地址rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rnrn[b][i]> 升级说明:[/i][/b]rn-----------------rn 1、使用 HP-Socket v3.1.2 及以前版本的应用程序可以安全升级到 HP-Socket v3.1.3rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.2 更新 ***[/color][/size][/b]rn rn[b][i]> 修改 Server 组件的 OnClose() / OnError() 事件的触发规则:[/i][/b]rn-----------------rn 1、以前版本的 TCP/UDP Server 组件中,当关闭一个连接时可能会同时触发一个 OnClose() 事件和若干个 OnError() 事件rn 2、由于存在上述可能性,所以应用程序需要对 OnClose() / OnError() 的处理事件代码段进行同步rn 3、从 v3.1.2 开始,多个 OnClose() / OnError() 事件同时发生时,组件只会向应用通知第一个事件,后续事件则忽略rn 4、应用程序在处理 OnClose() / OnError() 事件时不必处理同步,减少了出错的可能和编写同步及检测代码的负担rn[code=c]rn/* 示例代码一:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // 以前版本:rn // 有可能存在并发的 OnClose()/OnError(),要把代码放在临界区中并检测返回值rn CCriSecLock locallock(m_csPkgInfo); // GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr)rn rn m_Server->SetConnectionExtra(dwConnID, nullptr);rn delete pInfo;rn rnrn rn/* 示例代码二:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // v3.1.2 版本:rn // 只会接收到一个 OnClose()/OnError() 事件,能安全地移除临界区代码和检测代码rn rn PVOID pInfo = nullptr;rn m_Server->GetConnectionExtra(dwConnID, &pInfo);rn ASSERT(pInfo != nullptr);rn rn delete pInfo;rnrn[/code]rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加导出纯 C 函数的动态链接库 HPSocket4C.dll:[/i][/b]rn-----------------rn 1、增加代码文件 HPSocket4C.h 和 HPSocket4C.cpp,用于创建 HPSocket4C.dllrn 2、导出纯 C 函数,让其它语言(如:C/C#/Delphi 等)能方便地使用 HPSocketrn 3、HPSocket4C.dll 使用方法rn[code=text]rn方法一:rn----------------------------------------------------------------------------rn(0) (C/C++ 程序)包含 HPSocket4C.h 头文件rn(1) 调用 ::Create_HP_XxxListener() 函数创建监听器对象rn(2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象rn(3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数rn(4) 调用相关导出函数操作 HPSocket 对象rn(5) ...... ......rn(6) 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象rn(7) 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象rn rn方法二:rn----------------------------------------------------------------------------rn(1) 应用程序把需要用到的导出函数封装到特定语言的包装类中rn(2) 通过包装类封装后,以面向对象的方式使用 HPSocketrn[/code] 4、HPSocket4C.dll 动态链接库发行版本 [code=text]rn (1) x86/HPSocket4C.dll - (32位/MBCS/Release)rn (2) x86/HPSocket4C_D.dll - (32位/MBCS/DeBug)rn (3) x86/HPSocket4C_U.dll - (32位/UNICODE/Release)rn (4) x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug)rn (5) x64/HPSocket4C.dll - (64位/MBCS/Release)rn (6) x64/HPSocket4C_D.dll - (64位/MBCS/DeBug)rn (7) x64/HPSocket4C_U.dll - (64位/UNICODE/Release)rn (8) x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug)rn[/code]rn[b][i]> 全面启用 Buffer Pool 缓存机制:[/i][/b]rn-----------------rn 1、Common/Src 增加代码文件 bufferpool.h 和 bufferpool.cpp,实现 Buffer Pool 缓存机制rn 2、通过 Buffer Pool 缓存机制提升内存使用效率,减少动态内存分配和释放操作,避免内存空洞rn 3、CTcpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn 4、CUdpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn 5、CTcpPullClient 用 CItemPool 和 TItemList 实现发送缓冲区和 PULL 缓冲区rn 6、CTcpPullServer 用 CBufferPool 和 TBuffer 实现 PULL 缓冲区rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.0.2 更新 ***[/color][/size][/b]rn rn[b][i]> 把 HP-Socket 编译为动态链接库:[/i][/b]rn -----------------rn 1、应用程序可以通过导入源代码或动态链接库方式使用 HP-Socketrn 2、动态链接库使用方法rn[code=text]rn方法一:rn-----------------------------------------------------------------------rn(0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn(1) 调用 HP_Create_Xxx() 函数创建 HPSocket 对象rn(2) 使用完毕后调用 HP_Destroy_Xxx() 函数销毁 HPSocket 对象rn rn方法二:rn-----------------------------------------------------------------------rn(0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn(1) 创建 CXxxWrapper 包装器,通过包装器智能指针使用 HPSocket 对象rn[/code] 3、动态链接库发行版本 [code=text]rn (1) Bin/x86/HPSocket.dll - (32位/MBCS/Release)rn (2) Bin/x86/HPSocket_D.dll - (32位/MBCS/DeBug)rn (3) Bin/x86/HPSocket_U.dll - (32位/UNICODE/Release)rn (4) Bin/x86/HPSocket_UD.dll - (32位/UNICODE/DeBug)rn (5) Bin/x64/HPSocket.dll - (64位/MBCS/Release)rn (6) Bin/x64/HPSocket_D.dll - (64位/MBCS/DeBug)rn (7) Bin/x64/HPSocket_U.dll - (64位/UNICODE/Release)rn (8) Bin/x64/HPSocket_UD.dll - (64位/UNICODE/DeBug)rn[/code]rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.0.1 更新 ***[/color][/size][/b]rn rn[b][i]> 新增 UDP 通信组件:[/i][/b]rn-----------------rn 1、新增两个 UDP 通信组件:CUdpServer 为服务端组件,CUdpClient 为客户端组件rn 2、服务端组件 CUdpServer 采用 IOCP 通信模型rn 3、客户端组件 CUdpClient 采用 Event Select 通信模型rn 4、UDP 通信组件的接口与原 TCP 通信组件一致,简单实用rn 5、UDP 通信组件内置通信线路自动监测机制rn 6、新增 UDP 通信组件示例工程 TestEcho-UDPrn rn[b][i]> 代码重构与优化:[/i][/b]rn-----------------rn 1、规范所有接口、类以及代码文件的命名rn 2、重构和优化了大量组件代码rn 3、服务端组件加入读写锁机制,有效平衡处理性能与安全性rn 4、服务端组件的 Socket 对象缓存列表设置了锁定时间,提高访问的安全性rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v2.2.3 更新 ***[/color][/size][/b]rn rn[b][i]> 连接 ID 的数据类型改为‘CONNID’:[/i][/b]rn-----------------rn 1、在SocketHelper.h 中定义 CONNID 数据类型(默认:typedef ULONG_PTR CONNID)rn 2、应用程序可以把 CONNID 定义为其希望的类型(如:ULONG / ULONGLONG 等)rn 3、为了便于移植与维护,应用程序的任何地方都应该用‘CONNID’类型引用连接 IDrn rn[b][i]> 服务端 Socket 组件支持为每个连接绑定附加数据:[/i][/b]rn-----------------rn 1、IServerSocket 和 CIocpServer 增加方法 Get/SetConnectionExtra()rn 2、通过上述两个方法,应用程序可以为每个连接绑定任意附加数据并把数据获取出来rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v2.2.2 更新 ***[/color][/size][/b]rn rn[b][i]> 优化心跳检测相关功能:[/i][/b]rn-----------------rn 1、IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn 2、CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn 3、CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v2.2.1 更新 ***[/color][/size][/b]rn rn[b][i]> PULL 模型支持:[/i][/b]rn-----------------rn 1、ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn 2、增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rn rn[b][i]> Server:[/i][/b]rn-----------------rn 1、服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn 2、增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn 3、增加 PULL Server Socket 接口 IPullServerSocketrn 4、增加 PULL Server Socket 实现类 CIocpPullServerrn rn[b][i]> Client:[/i][/b]rn-----------------rn 1、客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn 2、客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn 3、增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn 4、增加 PULL Client Socket 接口 IPullClientSocketrn 5、增加 PULL Client Socket 实现类 CPullClientSocket
Android 网络通信框架Volley
使用volley前我们需要导入volley的jar包。 eclipse:下载jar包,复制到工程下的libs中即可。 studio: 法1:和eclipse一样把jar包放在libs下 法2:用studio直接下载:右击项目>open moudle settings>在Dependencies中搜索:volley,使用最新的版本,OK即可。 法3:导入源码包:file>右
Android Volley网络通信框架
Volley是Android平台上的<em>网络</em>通信库,能使<em>网络</em>通信更快,更简单,更健壮。Volley特别适合数据量不大但是通信频繁的场景。 Volley是简化了<em>网络</em>通信的一些开发,特别是针对如下两种情况: JSON对象 图片加载 但是其也有不实用的地方,比如大数据(large payloads ),流媒体。
android---(volley网络通信框架)
public class MainActivity extends AppCompatActivity { //请求队列 RequestQueue queue = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance
ESFramework网络通信框架
这是一套完全可复用的、灵活的、单纯的、支持N层C/S架构的轻量级<em>通信框架</em>,内置了对Tcp和Udp协议的支持。ESFramework不仅仅提供了一个基础的C/S框架和大量C/S应用中常用的组件,而且在ESFramework框架之上,引入的一个扩展层--ESFramework扩展层,专门用于解决的与具体应用相关的领域问题。
网络通信框架——Volley(二)
在人生舞台上,从不给落伍者颁发奖牌。 本讲内容:Volley提供三种方式来加载<em>网络</em>图片 1、ImageRequest的用法 ImageRequest与StringRequest和JsonRequest类似,都是继承自Request的。 步骤都是: 1. 创建一个RequestQueue对象。 2. 创建一个Request对象。 3. 将Request对象添
Android39_Volley网络通信框架
Volley<em>网络</em><em>通信框架</em> 一、Volley介绍: (一)、为什么要用Volley? Volley是Android平台上的<em>网络</em>通信库,能使<em>网络</em>通信更快,更简单,更健壮。 我们平时在开发Android应用的时候不可避免地都需要用到<em>网络</em>技术,而多数情况下应用程序都会使用HTTP协议来发送和接收<em>网络</em>数据。Android系统中主要提供了两种方式
Android网络通信框架Volley
谷歌2013年推出的安卓<em>网络</em>框架,学会它可以大大提高开发效率
Android-Volley网络通信框架
1.回顾        上篇对 Volley进行了简单介绍和对它的学习目的与目标,最后,为学习Volley做了一些准备 2.重点       2.1 RequestQueue 请求队列的建立       2.2 学习 StringRequest和JsonObjectRequest ; 3.RequestQueue 请求队列的建立    
Android网络通信框架
Android<em>网络</em>通讯架构有很多third party lib. 可参看如下: 1. Android<em>网络</em>通信开发使用的常见第三方框架汇总     http://blog.csdn.net/liuhaomatou/article/details/44857005 2. Google Volley        Transmitting Network Data Using Volle
Okhttp网络通信框架的使用
Okhttp框架的使用方法首先先让大家看一下,传统<em>网络</em>通信的连接方法,以此来说明使用okhttp框架的好处。这是URL的连接方法。 public String get(String u) throws IOException { URL url = new URL(u); HttpURLConnection conn = (HttpURLConnection) ur
IOCP网络通信框架
使用TCP的IOCP实现,可以传送消息包、文件,同一客户端可以同时发送多个文件
Volley网络通信框架、XUtils
VolleyVolley是在Google I/O 2013上发布的<em>网络</em><em>通信框架</em>,是Android平台上的<em>网络</em>通信库,能使<em>网络</em>通信更快,更简单,更健壮。特别适用于数据量不大但是通信频繁的场景。架构设计使用方法我们使用Volley发送一个GET请求或者POST请求,来连接<em>网络</em>。也可以来加载一个<em>网络</em>图片等。 首先我们在布局中加入两个按钮,一个用来点击请求<em>网络</em>连接,一个用来点击加载<em>网络</em>图片,这里加载的图片
轻量级网络通信框架nSocket.zip
nSocket是基于java NIO.1和NIO.2开发的轻量级<em>网络</em><em>通信框架</em>,该框架为用户提供异步非阻塞的<em>网络</em>编程接口。目前更新到0.1版本,实现了基本的连通性和简要的通信,在0.2版本中将增加filter chain的功能。nSocket与mina、netty、xSocket这类<em>高性能</em>的设计不同之处在于,nSocket将直接使用java7中的异步通道构建异步操作,并在后期将弱化C/S模式,逐步过渡到P2P模式。 编写目的: 简化NIO开发过程,将业务与实现细节分离; 后期将基于P2P<em>网络</em>实现,将弱化C/S模式; 为分布式提供基础通信平台。 已经实现: 1、IoCommunicate--IoAcceptor--IoConnector 2、IoSession  3、IoHandler 4、A Simple Polling 中文详情可见:nSocket设计概要 标签:nSocket
高性能 Socket 组件 HP-Socket v3.2.1 正式发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn  [color=#800000]HP-Socket 是一套通用的<em>高性能</em> TCP/UDP Socket 组件,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握组件的设计思想和使用方法,特此精心制作了大量 Demo 示例,包括 PUSH 模型示例、PULL模型示例和性能测试示例等。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rn rn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]通用性[/size][/b]rn   通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作。rn 与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rn rn[b][size=14px]可用性[/size][/b]rn   可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rn rn[b][size=14px]<em>高性能</em>[/size][/b]rn   作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn   [b]客户端:[/b]在单独线程中实现 Socket 通信交互,这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。每个组件对象管理一个 Socket 连接。rn   [b]服务端:[/b]采用高效的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rn   [b]Agent:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象管理多个 Socket 连接,与服务端采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]伸缩性[/size][/b]rn   可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 TcpAgent / TcpPullAgent 通信组件:[/i][/b]rn-----------------rn 1、对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接rn 2、TcpClient / TcpPullClient 基于 Event Select 通信模型,每个组件对象管理一个 Socket,并开启一个线程,不适合上述应用场景rn 3、TcpAgent / TcpPullAgent 基于 IOCP 通信模型,一个组件对象管理多个 Socket,适合用作代理服务器或中转服务器的客户端通信组件rn 4、TcpAgent / TcpPullAgent 的使用方式依然简单,提供以下接口方法:rn[code=c]rn/* 1) 通知接口方法:*/rnOnPrepareConnect(CONNID dwConnID, SOCKET socket)rnOnConnect(CONNID dwConnID)rnOnSend(CONNID dwConnID, const BYTE* pData, int iLength)rnOnReceive(CONNID dwConnID, const BYTE* pData, int iLength) //(Push 模型)rnOnReceive(CONNID dwConnID, int iLength) //(Pull 模型)rnOnClose(CONNID dwConnID)rnOnError(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rnOnAgentShutdown()rnrn/* 2) 主要操作方法:*/rnStart(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE)rnStop()rnConnect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)rnSend(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0)rnDisconnect(CONNID dwConnID, BOOL bForce = TRUE)rnFetch(CONNID dwConnID, BYTE* pData, int iLength) //(Pull 模型)rn[/code] 5、增加 TcpAgent / TcpPullAgent 使用示例:rn * Agent-PFMrn * Agent-Pullrn * Agent-4Crn[img=https://img-bbs.csdn.net/upload/201406/05/1401936622_343162.jpg][/img]rn 6、增加 TcpAgent + TcpServer 实现的 HTTP 代理服务器示例:HttpProxyrn[img=https://img-bbs.csdn.net/upload/201406/05/1401936640_775605.jpg][/img]rnrn[b][i]> 增加 HPSocket for Java SDK:[/i][/b]rn-----------------rn 1、提供 Java 开发包:hpsocket-3.2.1.jar(通过 JNA 实现,目前只支持 Windows 平台)rn 2、运行环境:JDK 1.6+,JVM 运行在 server 模式("java -server",在 client 模式下性能受影响)rn 3、MBCS 和 Unicode 版本分布位于包 org.jessma.hpsocket.mbcs 和 org.jessma.hpsocket.unicodern 4、HPSocket for Java SDK 提供以下通信组件:rn[code=text]rn1) TcpServer:TCP 通信服务端组件,支持 PUSH/PULL 模型rn2) TcpClient:TCP 通信客户端组件,支持 PUSH/PULL 模型rn3) TcpAgent :TCP 通信 Agent 组件,支持 PUSH/PULL 模型rn4) UdpServer:UDP 通信服务端组件,支持 PUSH 模型rn5) UdpClient:UDP 通信客户端组件,支持 PUSH 模型rn[/code] 5、HPSocket4J 的使用方法(以 TcpAgent 为例):rn[code=c]rn/* 0: 应用程序加入 hpsocket-3.2.1.jar 和 jna-4.1.0.jar */rnrn/* 1: 创建通信组件对象 */rnTcpAgent agent = TcpAgent.create(Mode.PUSH);rnrn/* 2: 设置回调函数对象 */rn// (可选)rnagent.setCallBackOnPrepareConnect(new OnPrepareConnectImpl());rn// (可选)rnagent.setCallBackOnConnect(new OnConnectImpl());rn// (必须)PUSH 模型需要设置 OnReceive 回调函数对象rnagent.setCallBackOnReceive(new OnReceiveImpl());rn// (必须)PULL 模型需要设置 OnPullReceive 回调函数对象rn// agent.setCallBackOnPullReceive(new OnPullReceiveImpl());rn// (可选)rnagent.setCallBackOnSend(new OnSendImpl());rn// (必须)rnagent.setCallBackOnClose(new OnCloseImpl());rn// (必须)rnagent.setCallBackOnError(new OnErrorImpl());rn// (可选)rnagent.setCallBackOnAgentShutdown(new OnAgentShutdownImpl());rnrn/* 3:启动通信组件 */rnagent.start("127.0.0.1", false);rnrn/* 4:连接服务器 */rnagent.connect("localhost", (short)5555, pdwConnID);rnrn/* 5:处理通信数据 */rn// 响应 OnReceive / OnPullReceive 事件接收数据rn// 使用 agent.send(dwConnID, data, data.length) 发送数据rnrn/* 6:关闭通信组件 */rnagent.stop();rnrn/* 7:销毁通信组件 */rnTcpAgent.destroy(agent);rn[/code] 6、增加示例工程 TestEcho-4J,展示 HPSocket4J 的使用方法(包括 PULL 模型示例和性能测试示例)rn[img=https://img-bbs.csdn.net/upload/201406/05/1401936663_823244.jpg][/img]rnrn[b][i]> 优化数据收发策略:[/i][/b]rn-----------------rn 1、Server 和 Agent 组件提供以下三种数据发送策略:rn[code=text]rn1)PACK - 打包模式(默认):尽量把多个发送操作的数据组合在一起发送,增加传输效率rn2)SAFE - 安全模式:尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出rn3)DIRECT - 直接模式:对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合rn[/code] 2、Server 和 Agent 组件提供以下两种数据接收策略:rn[code=text]rn1)SERIAL - 串行模式(默认):顺序触发同一连接的 OnReceive 和 OnClose/OnError 事件rn2)PARALLEL - 并行模式:在不同的通信线程中同时触发同一连接的 OnReceive 和 OnClose/OnError 事件 rn[/code][b][i]> 其它更新:[/i][/b]rn-----------------rn 1、IServer 的 GetClientAddress() 方法改名为 GetRemoteAddress()rn 2、IClient 的 Send() 方法删除 “CONNID dwConnID” 参数rn 3、IClient/IServer/IAgent 的 Send() 方法增加发送数据缓冲区指针偏移量参数 “int iOffset”rn 4、增加 EnSendPolicy 枚举类型,IServer/IAgent 增加发送模式设置方法 SetSendPolicy()rn 5、增加 EnRecvPolicy 枚举类型,IServer/IAgent 增加接收模式设置方法 SetRecvPolicy()rn 6、IServer/IAgent 增加方法:BOOL GetAllConnectionIDs(),获取所有连接的 CONNIDrn 7、IUdpServer 增加方法:SetPostReceiveCount(),设置 Receive 预投递数量rn 8、EnServerError / EnClientError 枚举类型合并为 EnSocketErrorrn 9、EnSocketError / EnHandleResult / EnFetchResult 枚举类型从原所在类中移到外部rn 10、IClient/IServer/IAgent 增加方法:BOOL GetPendingDataLength(),获取连接中未发出数据的长度rn 11、HPSocket4C.dll 增加方法 SendPart(),支持指定缓冲区指针偏移量rn 12、增加 HPSocket for C# SDK(由 int 2e 提供)rn 13、增加 HPSocket 易语言支持库(由 Yecate 提供)rn 14、公共代码包 vc-common-src 更新为 v2.3.5(参考:vc-common-src v2.3.5 的 Change Log)rn rn[b][i]> 升级说明:[/i][/b]rn-----------------rn 1、HP-Socket v3.2.1 在功能上兼容 HP-Socket v3.1.3 及以前版本rn 2、接口有变化,需要根据提示修改程序代码;注意:现有程序不能直接替换 v3.1.3 的 DLLrn 3、EnServerError / EnClientError 枚举类型合并为 EnSocketError,注意一些枚举值发生了变化rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.3 更新 ***[/color][/size][/b]rn rn[b][i]> 增加其它语言 Demo:[/i][/b]rn-----------------rn 1、C#rn 2、Delphirn 3、E 语言rnrn[b][i]> Bug Fix:[/i][/b]rn-----------------rn 1、修复 IP 地址判断错误 Bugrn 1) 客户端组件连接服务器时,如果服务器 IP 地址满位(12个数字:‘AAA.BBB.CCC.DDD’)则被错误地判断为域名rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn 2、 修复域名或主机名的 IP 地址解析错误 Bugrn 1) 客户端组件通过域名或主机名连接服务器时,可能会解析到错误的 IP 地址rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.2 更新 ***[/color][/size][/b]rn rn[b][i]> 修改 Server 组件的 OnClose() / OnError() 事件的触发规则:[/i][/b]rn-----------------rn 1、以前版本的 TCP/UDP Server 组件中,当关闭一个连接时可能会同时触发一个 OnClose() 事件和若干个 OnError() 事件rn 2、由于存在上述可能性,所以应用程序需要对 OnClose() / OnError() 的处理事件代码段进行同步rn 3、从 v3.1.2 开始,多个 OnClose() / OnError() 事件同时发生时,组件只会向应用通知第一个事件,后续事件则忽略rn 4、应用程序在处理 OnClose() / OnError() 事件时不必处理同步,减少了出错的可能和编写同步及检测代码的负担rn[code=c]rn/* 示例代码一:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // 以前版本:rn // 有可能存在并发的 OnClose()/OnError(),要把代码放在临界区中并检测返回值rn CCriSecLock locallock(m_csPkgInfo); // GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr)rn rn m_Server->SetConnectionExtra(dwConnID, nullptr);rn delete pInfo;rn rnrn rn/* 示例代码二:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // v3.1.2 版本:rn // 只会接收到一个 OnClose()/OnError() 事件,能安全地移除临界区代码和检测代码rn rn PVOID pInfo = nullptr;rn m_Server->GetConnectionExtra(dwConnID, &pInfo);rn ASSERT(pInfo != nullptr);rn rn delete pInfo;rnrn[/code]rn------------------------------------------------------------------------------------------------rn
OkHttp网络通信框架简单使用
1.添加依赖去官网查看最新版本这里是3.7.0网址:https://github.com/square/okhttpcompile 'com.squareup.okhttp3:okhttp:3.7.0'2.示例代码public class MainActivity extends AppCompatActivity { TextView shuju; @Override ...
MINA网络通信框架
基本介绍: Apache MINA 2 是一个开发<em>高性能</em>和高可伸缩性<em>网络</em>应用程序的<em>网络</em>应用框架。它提供了一个抽象的事件驱动的异步 API,可以使用 TCP/IP、UDP/IP、串口和虚拟机内部的管道等传输方式。Apache MINA 2 可以作为开发<em>网络</em>应用程序的一个良好基础。 Mina 的API 将真正的<em>网络</em>通信与我们的应用程序隔离开来,你只需要关心你要发送、 接收的数据以及你的业务逻...
Volley网络通信框架
-
高性能 Socket 组件 HP-Socket v3.2.1-RC1 发布
[url=http://www.jessma.org][img=https://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn  [color=#800000]HP-Socket 是一套通用的<em>高性能</em> TCP/UDP Socket 组件,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E、Java 等编程语言开发接口。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握组件的设计思想和使用方法,特此精心制作了大量 Demo 示例,包括 PUSH 模型示例、PULL模型示例和性能测试示例等。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。[/color]rn rn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]通用性[/size][/b]rn   通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn 与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rn rn[b][size=14px]可用性[/size][/b]rn   可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rn rn[b][size=14px]<em>高性能</em>[/size][/b]rn   作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn   [b]客户端:[/b]在单独线程中实现 Socket 通信交互,这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。每个组件对象管理一个 Socket 连接。rn   [b]服务端:[/b]采用高效的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rn   [b]Agent:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象管理多个 Socket 连接,与服务端采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]伸缩性[/size][/b]rn   可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.1 更新 ***[/color][/size][/b]rn[color=#FF0000][i] (注:当前为 RC1 版)[/i][/color]rn[b][i]> 增加 TcpAgent / TcpPullAgent 通信组件:[/i][/b]rn-----------------rn 1、对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接rn 2、TcpClient / TcpPullClient 基于 Event Select 通信模型,每个组件对象管理一个 Socket,并开启一个线程,不适合上述应用场景rn 3、TcpAgent / TcpPullAgent 基于 IOCP 通信模型,一个组件对象管理多个 Socket,适合用作代理服务器或中转服务器的客户端通信组件rn 4、TcpAgent / TcpPullAgent 的使用方式依然简单,提供以下接口方法:rn[code=c]rn/* 1) 通知接口方法:*/rnOnPrepareConnect(CONNID dwConnID, SOCKET socket)rnOnConnect(CONNID dwConnID)rnOnSend(CONNID dwConnID, const BYTE* pData, int iLength)rnOnReceive(CONNID dwConnID, const BYTE* pData, int iLength) //(Push 模型)rnOnReceive(CONNID dwConnID, int iLength) //(Pull 模型)rnOnClose(CONNID dwConnID)rnOnError(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rnOnAgentShutdown()rnrn/* 2) 主要操作方法:*/rnStart(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE)rnStop()rnConnect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)rnSend(CONNID dwConnID, const BYTE* pBuffer, int iLength)rnDisconnect(CONNID dwConnID, BOOL bForce = TRUE)rnFetch(CONNID dwConnID, BYTE* pData, int iLength) //(Pull 模型)rn[/code]rn5、增加 TcpAgent / TcpPullAgent 使用示例:rn * Agent-PFMrn * Agent-Pullrn * Agent-4Crnrn[b][i]> 增加 HPSocket for Java SDK:[/i][/b]rn-----------------rn 1、提供 Java 开发包:hpsocket-3.2.1.jar(通过 JNA 实现,目前只支持 Windows 平台)rn 2、运行环境:JDK 1.6+,JVM 运行在 server 模式("java -server",在 client 模式下某些回调函数不能正常触发)rn 3、增加示例工程 TestEcho-4J,展示 HPSocket4J 的使用方法(包括 PULL 模型示例和性能测试示例)rn 4、MBCS 和 Unicode 版本分布位于包 org.jessma.hpsocket.mbcs 和 org.jessma.hpsocket.unicodern 5、HPSocket for Java SDK 提供以下通信组件:rn[code=text]rn1) TcpServer:TCP 通信服务端组件,支持 PUSH/PULL 模型rn2) TcpClient:TCP 通信客户端组件,支持 PUSH/PULL 模型rn3) TcpAgent :TCP 通信 Agent 组件,支持 PUSH/PULL 模型rn4) UdpServer:UDP 通信服务端组件,支持 PUSH 模型rn5) UdpClient:UDP 通信客户端组件,支持 PUSH 模型rn[/code] rn 6、HPSocket4J 的使用方法(以 TcpAgent 为例):rn[code=c]rn/* 0: 应用程序加入 hpsocket-3.2.1.jar 和 jna-4.1.0.jar */rnrn/* 1: 创建通信组件对象 */rnTcpAgent agent = TcpAgent.create(Mode.PUSH);rnrn/* 2: 设置回调函数对象 */rn// (可选)rnagent.setCallBackOnPrepareConnect(new OnPrepareConnectImpl());rn// (可选)rnagent.setCallBackOnConnect(new OnConnectImpl());rn// (必须)PUSH 模型需要设置 OnReceive 回调函数对象rnagent.setCallBackOnReceive(new OnReceiveImpl());rn// (必须)PULL 模型需要设置 OnPullReceive 回调函数对象rn// agent.setCallBackOnPullReceive(new OnPullReceiveImpl());rn// (可选)rnagent.setCallBackOnSend(new OnSendImpl());rn// (必须)rnagent.setCallBackOnClose(new OnCloseImpl());rn// (必须)rnagent.setCallBackOnError(new OnErrorImpl());rn// (可选)rnagent.setCallBackOnAgentShutdown(new OnAgentShutdownImpl());rnrn/* 3:启动通信组件 */rnagent.start("127.0.0.1", false);rnrn/* 4:连接服务器 */rnagent.connect("localhost", (short)5555, pdwConnID);rnrn/* 5:处理通信数据 */rn// 响应 OnReceive / OnPullReceive 事件接收数据rn// 使用 agent.send(dwConnID, data, data.length) 发送数据rnrn/* 6:关闭通信组件 */rnagent.stop();rnrn/* 7:销毁通信组件 */rnTcpAgent.destroy(agent);rn[/code]rn[b][i]> 其它更新:[/i][/b]rn-----------------rn 1、IServer 的 GetClientAddress() 方法改名为 GetRemoteAddress()rn 2、EnServerError / EnClientError 枚举类型合并为 EnSocketErrorrn 3、EnSocketError / EnHandleResult / EnFetchResult 枚举类型从原所在类中移到外部rn 4、公共代码包 vc-common-src 更新为 v2.3.3(参考:vc-common-src v2.3.3 的 Change Log)rn 5、增加 HPSocket for C# SDK(由 int 2e 提供)rn 6、代码整理优化rn rn[b][i]> 升级说明:[/i][/b]rn-----------------rn1、HP-Socket v3.2.1 在功能上兼容 HP-Socket v3.1.3 及以前版本rn2、由于代码作了一些重构,需要根据提示修改程序代码rn3、EnServerError / EnClientError 枚举类型合并为 EnSocketError,注意一些枚举值发生了变化rn4、不需要使用 TcpAgent / TcpPullAgent 的用户可以暂不更新rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.3 更新 ***[/color][/size][/b]rn rn[b][i]> 增加其它语言 Demo:[/i][/b]rn-----------------rn 1、C#rn 2、Delphirn 3、E 语言rnrn[b][i]> Bug Fix:[/i][/b]rn-----------------rn 1、修复 IP 地址判断错误 Bugrn 1) 客户端组件连接服务器时,如果服务器 IP 地址满位(12个数字:‘AAA.BBB.CCC.DDD’)则被错误地判断为域名rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn 2、 修复域名或主机名的 IP 地址解析错误 Bugrn 1) 客户端组件通过域名或主机名连接服务器时,可能会解析到错误的 IP 地址rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.2 更新 ***[/color][/size][/b]rn rn[b][i]> 修改 Server 组件的 OnClose() / OnError() 事件的触发规则:[/i][/b]rn-----------------rn 1、以前版本的 TCP/UDP Server 组件中,当关闭一个连接时可能会同时触发一个 OnClose() 事件和若干个 OnError() 事件rn 2、由于存在上述可能性,所以应用程序需要对 OnClose() / OnError() 的处理事件代码段进行同步rn 3、从 v3.1.2 开始,多个 OnClose() / OnError() 事件同时发生时,组件只会向应用通知第一个事件,后续事件则忽略rn 4、应用程序在处理 OnClose() / OnError() 事件时不必处理同步,减少了出错的可能和编写同步及检测代码的负担rn[code=c]rn/* 示例代码一:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // 以前版本:rn // 有可能存在并发的 OnClose()/OnError(),要把代码放在临界区中并检测返回值rn CCriSecLock locallock(m_csPkgInfo); // GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr)rn rn m_Server->SetConnectionExtra(dwConnID, nullptr);rn delete pInfo;rn rnrn rn/* 示例代码二:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // v3.1.2 版本:rn // 只会接收到一个 OnClose()/OnError() 事件,能安全地移除临界区代码和检测代码rn rn PVOID pInfo = nullptr;rn m_Server->GetConnectionExtra(dwConnID, &pInfo);rn ASSERT(pInfo != nullptr);rn rn delete pInfo;rnrn[/code]rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加导出纯 C 函数的动态链接库 HPSocket4C.dll:[/i][/b]rn-----------------rn 1、增加代码文件 HPSocket4C.h 和 HPSocket4C.cpp,用于创建 HPSocket4C.dllrn 2、导出纯 C 函数,让其它语言(如:C/C#/Delphi 等)能方便地使用 HPSocketrn 3、HPSocket4C.dll 使用方法rn[code=text]rn方法一:rn----------------------------------------------------------------------------rn(0) (C/C++ 程序)包含 HPSocket4C.h 头文件rn(1) 调用 ::Create_HP_XxxListener() 函数创建监听器对象rn(2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象rn(3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数rn(4) 调用相关导出函数操作 HPSocket 对象rn(5) ...... ......rn(6) 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象rn(7) 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象rn rn方法二:rn----------------------------------------------------------------------------rn(1) 应用程序把需要用到的导出函数封装到特定语言的包装类中rn(2) 通过包装类封装后,以面向对象的方式使用 HPSocketrn[/code] 4、HPSocket4C.dll 动态链接库发行版本 [code=text]rn (1) x86/HPSocket4C.dll - (32位/MBCS/Release)rn (2) x86/HPSocket4C_D.dll - (32位/MBCS/DeBug)rn (3) x86/HPSocket4C_U.dll - (32位/UNICODE/Release)rn (4) x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug)rn (5) x64/HPSocket4C.dll - (64位/MBCS/Release)rn (6) x64/HPSocket4C_D.dll - (64位/MBCS/DeBug)rn (7) x64/HPSocket4C_U.dll - (64位/UNICODE/Release)rn (8) x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug)rn[/code]rn[b][i]> 全面启用 Buffer Pool 缓存机制:[/i][/b]rn-----------------rn 1、Common/Src 增加代码文件 bufferpool.h 和 bufferpool.cpp,实现 Buffer Pool 缓存机制rn 2、通过 Buffer Pool 缓存机制提升内存使用效率,减少动态内存分配和释放操作,避免内存空洞rn 3、CTcpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn 4、CUdpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn 5、CTcpPullClient 用 CItemPool 和 TItemList 实现发送缓冲区和 PULL 缓冲区rn 6、CTcpPullServer 用 CBufferPool 和 TBuffer 实现 PULL 缓冲区rn------------------------------------------------------------------------------------------------
高性能的java AIO通信框架 物联网参考
不到800行代码实现极简、易用、<em>高性能</em>的java AIO<em>通信框架</em>,也许是物联网开发的最佳选择
android Volley网络通信框架学习
ent(Apache)等,Google I/O 2013上,Volley发布了。[color=red]Volley是Android平台上的<em>网络</em>通信库,能使<em>网络</em>通信更快,更简单,更健壮。[/color] 这是Volley名称的由来: a burst or emission of many things or a large amount at once [size=small][b]1.1. Volley引入的背景[/b][/size] 在以前,我们可能面临如下很多麻烦的问题。 比如以前从
Volley网络通信框架学习笔记(一)
1.什么是Volley 我们平时在开发Android应用的时候不可避免地都需要用到<em>网络</em>技术,而多数情况下应用程序都会使用HTTP协议来发送和接收<em>网络</em>数据。 Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。 不过这两个类的用法还是稍微有些复杂的,如果不进行适当封装
volley网络通信框架的基本使用
实现登录与后台用volley通信,以及volley的基本使用
安卓网络编程——Volley(网络通信框架
Volley 引子 Σ(っ °Д °;)っ重要的话终究还是讲了三遍...Android主要有三种形式实现<em>网络</em>编程 传送门
网络通信框架GRPC的C++开发
<em>网络</em><em>通信框架</em>GRPC的C++开发,本课程实现了优化的编译环境配置,能够极为方便的将GRPC引入到自己的项目中。
网络通信框架netty源码解析
此课程为netty源码的解析,希望能帮助到大家
高性能网络
掌握 Hyper-V 功能发展历史,能够规划和安装 Hyper-V 服务,能够配置 Hyper-V 中,不同类型的计算,存储和<em>网络</em>资源,实现虚拟机的实时迁移,复制和群集
Mycat开发实践---Mycat的网络通信框架
1从一个测试说起网上有人对Cobar和MyCAT做了一个简单的比较测试,过程如下: 1 测试环境 利用A、B、C三大类服务器,在A台上面安装配置MyCAT及Cobar,这样保证了硬件方面的一致性。B类服务器上安装Apache这一web服务,使用PHP语言。C类安装MySQL数据库,其中B类与C类均不止一台,主要目的是为了作压力的均分。C类服务器安装了4台,存放了相同的数据库,对其中一个表进行分片
基于netty写的网络通信框架
最近在做一个项目,用到了远程调用方式,开始采用的是rmi,后来经过测试,rmi可能无法达到项目的一些性能上的要求,于是采用了基于tcp/udp的netty,但是直接用netty开发,有些麻烦了,我们想把服务抽取出来部署在远程服务器上,开发的兄弟们只是在自己的项目中负责调用一下,就跟rmi类似,非常方便。 但是又有一个问题,调用的兄弟需要在web中请求这种tcp服务,netty内部是异步处...
Volley网络通信框架学习笔记(二)
上一篇介绍了如何用volley来创建获取JSON,上一篇的地址在 http://blog.csdn.net/linshijun33/article/details/47954693 这一篇就来介绍一下如何利用Volley来加载图片。1.利用Volley异步加载图片/** * 利用Volley异步加载图片 * * 注意方法参数: * getImageList
2.Mycat原理解析-网络通信框架
一、3种 IO 类型 根据消息通信机制来分,IO分为同步与异步 同步:调用者主动等待调用的结果,发出调用后,在没有得到结果之前该调用就不返回; 异步:发出调用后就直接返回了,但是没有结果。被调用者会在调用真正执行完后,通过状态或者回调函数将结果通知调用者。 根据程序在等待调用结果时的状态来分,IO分为阻塞于非阻塞。 阻塞:调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。
Go-Go语言的TCP网络通信框架
Go语言的TCP<em>网络</em><em>通信框架</em>
安卓网络编程——Android-async-http(网络通信框架
之前学习了一款安卓的<em>网络</em><em>通信框架</em>Volley https://blog.csdn.net/nishigesb123/article/details/89356776 Volley是谷歌官方推出的,而本文介绍的Android-async-http也是一个<em>网络</em><em>通信框架</em>(准确点,<em>网络</em>请求框架)不过是第三方的。 之前学习了Apache HTTP Client,说Apache HTTP Client已...
通信框架
1、长连接还是短连接? 选择长连接,原因:更节约资源,多个消息复用同一个链路。 2、BIO还是NIO? BIO通信模型最大的问题是系统缺乏弹性伸缩能力,服务端线程个数和客户端个数并发访问数呈现1:1比例,线程膨胀后,系统性能急剧下降,系统发生堆栈溢出,创建新线程失败,造成进程僵死等现象。 多路复用技术:把多个IO的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同...
HP-Socket 3.0.1
========================================================================================== 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、由于重命名了大量接口、类以及代码文件,因此升级时需要作相应调整
HP-Socket V3.2.1
HP-Socket 是一套通用的<em>高性能</em> TCP/UDP Socket 框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。 为了让使用者能方便快速地学习和使用 HP-Socket ,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。
HP-SOCKET很好用的网络底层引擎
这段时间对<em>网络</em>底层框架有些兴趣,找了几个,最后找到 HP-SOCKET,说明书写得很棒,使用也很简单。 做了一个测试程序,测试一下,随便学习怎么用它。 以后什么<em>网络</em>游戏呀,android传数据呀,都可以用它。 翻到用C#写的黄巾之乱DEMO,<em>网络</em>底层也可以用它,我想在<em>网络</em>层无后顾之忧了。 现在百度云放录像很好用,随便录了个黄巾之乱DEMO录像: h
Java跨平台网络音乐播放器
Java<em>跨平台</em><em>网络</em>音乐播放器,仿酷我,能够搜索<em>网络</em>音乐并播放,使用JLayer类库实现
跨平台网络考试系统
本人用一年时间开发而成的,系统功能完善,通用性、可控性、易用性好。包括源程序、论文稿、PPT演示文件联系:xsm@dgjmxx.net 13612689133
高性能跨平台渲染引擎系列一: 跨平台渲染引擎简介
引言:      一直工作比较忙,很久就想写点东西做个备忘,拖延至今。本系列也期望督促自己坚持记录分享,文中如有笔误或者理解偏差,欢迎各位指正交流。也期望未来基于该系列文章的相关代码同步到git上,最终完成一款<em>高性能</em><em>跨平台</em>3D渲染引擎;     何为3D渲染引擎,借用百度百科的解释吧:       3D引擎作为一个名词已经存在了很多年,但即使是一些专业的引擎设计师,也很难就它的定义达成一个共识。通...
跨平台网络库Sockets
功能强大的<em>跨平台</em><em>网络</em>库,广泛用于现在的App
通用高性能 Windows Socket 组件 HP-Socket v2.2.2 正式发布
[img=http://bcs.duapp.com/jessma/blog/201306/Project-HP-Socket.png][/img]rnrn  HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=https://code.google.com/p/ldcsaa/]https://code.google.com/p/ldcsaa/[/url]rnrn----------------------------------------------------------------rn[b]通用性[/b]rn  通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rnrn[b]可用性[/b]rn  可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rnrn[b]<em>高性能</em>[/b]rn  作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn  客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn  服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rnrn[b]伸缩性[/b]rn  可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rnrn[b] 更新记录:[/b]rn*** v2.2.2 更新 ***rn > 优化心跳检测相关功能:rn -----------------rn * IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn * CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn * CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rnrn[b]*** v2.2.1 更新 ***[/b]rn> PULL 模型支持:rn-----------------rn * ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn * 增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rn> Server:rn-----------------rn * 服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn * 增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn * 增加 PULL Server Socket 接口 IPullServerSocketrn * 增加 PULL Server Socket 实现类 CIocpPullServerrn> Client:rn-----------------rn * 客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn * 客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn * 增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn * 增加 PULL Client Socket 接口 IPullClientSocketrn * 增加 PULL Client Socket 实现类 CPullClientSocket  rn> 其它更新:rn-----------------rn * 增加 PULL Socket 测试程序 TestEcho-Pullrn * 在 SocketHelper.h (.cpp) 中添加若干帮助结构体rn> 升级说明:rn-----------------rn * 使用 HP-Socket v2.1.1 的应用程序可以安全升级到 v2.2.1rn * 由于 ISocketServer、ISocketClient 和 CSocketClient 的名称已修改,因此,应用程序需要对引用的名称和包含的头文件名作相应修改
高性能 Windows Socket 组件 HP-Socket v2.2.3 正式发布
[img=http://bcs.duapp.com/jessma/blog/201306/Project-HP-Socket.png][/img]rn  [color=#993300]HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rnrn------------------------------------------------------------------------------------------------rn[b]通用性[/b]rn  通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rnrn[b]可用性[/b]rn  可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rnrn[b]<em>高性能</em>[/b]rn  作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn  客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn  服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rnrn[b]伸缩性[/b]rn  可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v2.2.3 更新 ***[/color][/size][/b]rnrn[b]> 连接 ID 的数据类型改为‘CONNID’:[/b]rn-----------------rn 1、在SocketHelper.h 中定义 CONNID 数据类型(默认:typedef ULONG_PTR CONNID)rn 2、应用程序可以把 CONNID 定义为其希望的类型(如:ULONG / ULONGLONG 等)rn 3、为了便于移植与维护,应用程序的任何地方都应该用‘CONNID’类型引用连接 IDrnrn[b]> 服务端 Socket 组件支持为每个连接绑定附加数据:[/b]rn-----------------rn 1、IServerSocket 和 CIocpServer 增加方法 Get/SetConnectionExtra()rn 2、通过上述两个方法,应用程序可以为每个连接绑定任意附加数据并把数据获取出来rnrn[b]> 其它更新:[/b]rn-----------------rn 1、放宽 CIocpServer 的最大 IOCP 工作线程数目限制(64 改为 500)rn 2、服务端 Socket 组件的 Disconnect() 方法增加一个标识参数‘bForce’,指示是否强制断开连接rn 3、调整连接 ID 的生成规则,避免生成数值为 0 的连接 IDrn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v2.2.2 更新 ***[/color][/size][/b]rnrn[b]> 优化心跳检测相关功能:[/b]rn -----------------rn 1、IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn 2、CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn 3、CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v2.2.1 更新 ***[/color][/size][/b]rnrn[b]> PULL 模型支持:[/b]rn-----------------rn 1、ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn 2、增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rnrn[b]> Server:[/b]rn-----------------rn 1、服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn 2、增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn 3、增加 PULL Server Socket 接口 IPullServerSocketrn 4、增加 PULL Server Socket 实现类 CIocpPullServerrnrn[b]> Client:[/b]rn-----------------rn 1、客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn 2、客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn 3、增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn 4、增加 PULL Client Socket 接口 IPullClientSocketrn 5、增加 PULL Client Socket 实现类 CPullClientSocket  rnrn[b]> 其它更新:[/b]rn-----------------rn 1、增加 PULL Socket 测试程序 TestEcho-Pullrn 2、在 SocketHelper.h (.cpp) 中添加若干帮助结构体
【圣诞呈献】高性能 Socket 组件 HP-Socket v3.1.1 正式发布
[img=https://img-bbs.csdn.net/upload/201312/25/1387938383_193519.png][/img]rn  [color=#800000]HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn------------------------------------------------------------------------------------------------rn[b]通用性[/b]rn  通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rnrn[b]可用性[/b]rn  可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rnrn[b]<em>高性能</em>[/b]rn  作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn  客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn  服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rnrn[b]伸缩性[/b]rn  可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v3.1.1 更新 ***[/color][/size][/b]rnrn[b][i]> 增加导出纯 C 函数的动态链接库 HPSocket4C.dll:[/i][/b]rn-----------------rn1、增加代码文件 HPSocket4C.h 和 HPSocket4C.cpp,用于创建 HPSocket4C.dllrn2、导出纯 C 函数,让其它语言(如:C/C#/Delphi 等)能方便地使用 HPSocketrn3、HPSocket4C.dll 使用方法rnrn [i]方法一:rn --------------------------------------------------------------------------------------rn (0) (C/C++ 程序)包含 HPSocket4C.h 头文件rn (1) 调用 ::Create_HP_XxxListener() 函数创建监听器对象rn (2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象rn (3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数rn (4) 调用相关导出函数操作 HPSocket 对象rn (5) ...... ......rn (6) 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象rn (7) 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象rnrn 方法二:rn --------------------------------------------------------------------------------------rn (1) 应用程序把需要用到的导出函数封装到特定语言的包装类中rn (2) 通过包装类封装后,以面向对象的方式使用 HPSocket[/i]rnrn4、HPSocket4C.dll 动态链接库发行版本rnrn [i](1) x86/HPSocket4C.dll - (32位/MBCS/Release)rn (2) x86/HPSocket4C_D.dll - (32位/MBCS/DeBug)rn (3) x86/HPSocket4C_U.dll - (32位/UNICODE/Release)rn (4) x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug)rn (5) x64/HPSocket4C.dll - (64位/MBCS/Release)rn (6) x64/HPSocket4C_D.dll - (64位/MBCS/DeBug)rn (7) x64/HPSocket4C_U.dll - (64位/UNICODE/Release)rn (8) x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug[/i])rnrn[b][i]> 全面启用 Buffer Pool 缓存机制:[/i][/b]rn-----------------rn1、Common/Src 增加代码文件 bufferpool.h 和 bufferpool.cpp,实现 Buffer Pool 缓存机制rn2、通过 Buffer Pool 缓存机制提升内存使用效率,减少动态内存分配和释放操作,避免内存空洞rn3、CTcpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn4、CUdpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn5、CTcpPullClient 用 CItemPool 和 TItemList 实现发送缓冲区和 PULL 缓冲区rn6、CTcpPullServer 用 CBufferPool 和 TBuffer 实现 PULL 缓冲区rnrn[b][i]> 其它更新:[/i][/b]rn-----------------rn1、IServer 增加接口方法 DisconnectLongConnections() 用于断开所有超长连接rn2、IServer 删除接口方法 GetConnectionCriSec()rn3、IClient 增加方法 Get/SetFreeBufferPoolSize()、Get/SetFreeBufferPoolHold() 用于设置 Buffer Pool 缓存大小和阀值rn4、IPullServer 删除方法 Get/SetFreePullBufferPool()、Get/SetFreePullBufferHold()rn5、HPSocket.dll 和 HPSocket4C.dll 使用 /MT(d) 选项重新编译,消除对运行时库的依赖rn6、增加示例工程 TestEcho-4C,展示 HPSocket4C.dll 的使用方法rnrn[b][i]> 升级说明:[/i][/b]rn-----------------rn1、使用 HP-Socket v3.0.2 及以前版本的应用程序可以安全升级到 HP-Socket v3.1.1rn2、如果工程想通过导入 HPSocket4C.dll 的方式使用 HP-Socket,请参考 TestEcho-4C 示例工程rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v3.0.2 更新 ***[/color][/size][/b]rnrn[b][i]> 把 HP-Socket 编译为动态链接库:[/i][/b]rn-----------------rn 1、应用程序可以通过导入源代码或动态链接库方式使用 HP-Socketrn 2、动态链接库使用方法rnrn [i]方法一:rn -----------------------------------------------------------------------rn (0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn (1) 调用 HP_Create_Xxx() 函数创建 HPSocket 对象rn (2) 使用完毕后调用 HP_Destroy_Xxx() 函数销毁 HPSocket 对象rnrn 方法二:rn -----------------------------------------------------------------------rn (0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn (1) 创建 CXxxWrapper 包装器,通过包装器智能指针使用 HPSocket 对象[/i]rnrn 3、动态链接库发行版本rnrn [i](1) Bin/x86/HPSocket.dll - (32位/MBCS/Release)rn (2) Bin/x86/HPSocket_D.dll - (32位/MBCS/DeBug)rn (3) Bin/x86/HPSocket_U.dll - (32位/UNICODE/Release)rn (4) Bin/x86/HPSocket_UD.dll - (32位/UNICODE/DeBug)rn (5) Bin/x64/HPSocket.dll - (64位/MBCS/Release)rn (6) Bin/x64/HPSocket_D.dll - (64位/MBCS/DeBug)rn (7) Bin/x64/HPSocket_U.dll - (64位/UNICODE/Release)rn (8) Bin/x64/HPSocket_UD.dll - (64位/UNICODE/DeBug)[/i]rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v3.0.1 更新 ***[/color][/size][/b]rnrn[b][i]> 新增 UDP 通信组件:[/i][/b]rn-----------------rn 1、新增两个 UDP 通信组件:CUdpServer 为服务端组件,CUdpClient 为客户端组件rn 2、服务端组件 CUdpServer 采用 IOCP 通信模型rn 3、客户端组件 CUdpClient 采用 Event Select 通信模型rn 4、UDP 通信组件的接口与原 TCP 通信组件一致,简单实用rn 5、UDP 通信组件内置通信线路自动监测机制rn 6、新增 UDP 通信组件示例工程 TestEcho-UDPrnrn[b][i]> 代码重构与优化:[/i][/b]rn-----------------rn 1、规范所有接口、类以及代码文件的命名rn 2、重构和优化了大量组件代码rn 3、服务端组件加入读写锁机制,有效平衡处理性能与安全性rn 4、服务端组件的 Socket 对象缓存列表设置了锁定时间,提高访问的安全性rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v2.2.3 更新 ***[/color][/size][/b]rnrn[b][i]> 连接 ID 的数据类型改为‘CONNID’:[/i][/b]rn-----------------rn 1、在SocketHelper.h 中定义 CONNID 数据类型(默认:typedef ULONG_PTR CONNID)rn 2、应用程序可以把 CONNID 定义为其希望的类型(如:ULONG / ULONGLONG 等)rn 3、为了便于移植与维护,应用程序的任何地方都应该用‘CONNID’类型引用连接 IDrnrn[b][i]> 服务端 Socket 组件支持为每个连接绑定附加数据:[/i][/b]rn-----------------rn 1、IServerSocket 和 CIocpServer 增加方法 Get/SetConnectionExtra()rn 2、通过上述两个方法,应用程序可以为每个连接绑定任意附加数据并把数据获取出来rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v2.2.2 更新 ***[/color][/size][/b]rnrn[b][i]> 优化心跳检测相关功能:[/i][/b]rn -----------------rn 1、IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn 2、CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn 3、CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v2.2.1 更新 ***[/color][/size][/b]rnrn[b][i]> PULL 模型支持:[/i][/b]rn-----------------rn 1、ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn 2、增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rnrn[b][i]> Server:[/i][/b]rn-----------------rn 1、服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn 2、增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn 3、增加 PULL Server Socket 接口 IPullServerSocketrn 4、增加 PULL Server Socket 实现类 CIocpPullServerrnrn[b][i]> Client:[/i][/b]rn-----------------rn 1、客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn 2、客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn 3、增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn 4、增加 PULL Client Socket 接口 IPullClientSocketrn 5、增加 PULL Client Socket 实现类 CPullClientSocket
HP-Socket V4.2.1
开源<em>高性能</em> TCP/UDP <em>通信框架</em> HP-Socket v4.2.1. 最近使用Delphi XE8调用HP-Socket通信SDK. 原来带的Delphi的例子, 只能在低版本的Delphi(如Delphi7)下编译(还有一些bug), 本资源中包含完整的HP-Socket V4.2.1, 另外附加了我修改好的3个Delphi XE8下编译通过的Demo程序. 和Socket Tools工具做了通信测试.
【新年呈献】高性能 Socket 组件 HP-Socket v3.1.2 正式发布
[img=https://img-bbs.csdn.net/upload/201401/14/1389669741_814180.png][/img]rn  [color=#993300]HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。[/color]rn rn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn ------------------------------------------------------------------------------------------------rn [b]通用性[/b]rn   通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn 与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rn rn[b]可用性[/b]rn   可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rn rn[b]<em>高性能</em>[/b]rn   作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn   客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn   服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rn rn[b]伸缩性[/b]rn   可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v3.1.2 更新 ***[/size][/color][/b]rn rn[b]> 修改 Server 组件的 OnClose() / OnError() 事件的触发规则:[/b]rn-----------------rn 1、以前版本的 TCP/UDP Server 组件中,当关闭一个连接时可能会同时触发一个 OnClose() 事件和若干个 OnError() 事件rn 2. 由于存在上述可能性,所以应用程序需要对 OnClose() / OnError() 的处理事件代码段进行同步rn 3、从 v3.1.2 开始,当多个 OnClose() / OnError() 事件同时发生时,组件只会向应用程序通知第一个事件,后续事件则忽略rn 4. 因此,应用程序在处理 OnClose() / OnError() 事件时不必处理同步,减少了出错的可能和编写同步及检测代码的负担rn[code=c]/* 示例代码一:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // 以前版本:rn // 有可能存在并发的 OnClose()/OnError(),要把代码放在临界区中并检测返回值rn CCriSecLock locallock(m_csPkgInfo); // GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr)rn rn m_Server->SetConnectionExtra(dwConnID, nullptr);rn delete pInfo;rn rnrnrn/* 示例代码二:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // v3.1.2 版本:rn // 只会接收到一个 OnClose()/OnError() 事件,能安全地移除临界区代码和检测代码rnrn PVOID pInfo = nullptr;rn m_Server->GetConnectionExtra(dwConnID, &pInfo);rn ASSERT(pInfo != nullptr);rnrn delete pInfo;rn[/code]rn[b]> 其它更新:[/b]rn-----------------rn[code=text]1、调整 TCP Server 默认参数:rn1) DEFAULT_SOCKET_LISTEN_QUEUE : 300rn2) DEFAULT_ACCEPT_SOCKET_COUNT : 300rn3) DEFAULT_FREE_SOCKETOBJ_POOL : 150rn4) DEFAULT_FREE_SOCKETOBJ_HOLD : 450rn5) DEFAULT_FREE_BUFFEROBJ_POOL : 300rn6) DEFAULT_FREE_BUFFEROBJ_HOLD : 900rnrn2、调整 UDP Server 默认参数:rn1) DEFAULT_FREE_SOCKETOBJ_POOL : 150rn2) DEFAULT_FREE_SOCKETOBJ_HOLD : 450rn3) DEFAULT_FREE_BUFFEROBJ_POOL : 300rn4) DEFAULT_FREE_BUFFEROBJ_HOLD : 900[/code]rn[b]> 升级说明:[/b]rn-----------------rn 1、使用 HP-Socket v3.1.1 及以前版本的应用程序可以安全升级到 HP-Socket v3.1.2rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v3.1.1 更新 ***[/size][/color][/b]rn rn[b]> 增加导出纯 C 函数的动态链接库 HPSocket4C.dll:[/b]rn-----------------rn 1、增加代码文件 HPSocket4C.h 和 HPSocket4C.cpp,用于创建 HPSocket4C.dllrn 2、导出纯 C 函数,让其它语言(如:C/C#/Delphi 等)能方便地使用 HPSocketrn 3、HPSocket4C.dll 使用方法rn[code=text]方法一:rn----------------------------------------------------------------------------rn(0) (C/C++ 程序)包含 HPSocket4C.h 头文件rn(1) 调用 ::Create_HP_XxxListener() 函数创建监听器对象rn(2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象rn(3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数rn(4) 调用相关导出函数操作 HPSocket 对象rn(5) ...... ......rn(6) 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象rn(7) 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象rn rn方法二:rn----------------------------------------------------------------------------rn(1) 应用程序把需要用到的导出函数封装到特定语言的包装类中rn(2) 通过包装类封装后,以面向对象的方式使用 HPSocket[/code]rn 4、HPSocket4C.dll 动态链接库发行版本rn rn (1) x86/HPSocket4C.dll - (32位/MBCS/Release)rn (2) x86/HPSocket4C_D.dll - (32位/MBCS/DeBug)rn (3) x86/HPSocket4C_U.dll - (32位/UNICODE/Release)rn (4) x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug)rn (5) x64/HPSocket4C.dll - (64位/MBCS/Release)rn (6) x64/HPSocket4C_D.dll - (64位/MBCS/DeBug)rn (7) x64/HPSocket4C_U.dll - (64位/UNICODE/Release)rn (8) x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug)rn rn[b]> 全面启用 Buffer Pool 缓存机制:[/b]rn-----------------rn 1、Common/Src 增加代码文件 bufferpool.h 和 bufferpool.cpp,实现 Buffer Pool 缓存机制rn 2、通过 Buffer Pool 缓存机制提升内存使用效率,减少动态内存分配和释放操作,避免内存空洞rn 3、CTcpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn 4、CUdpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn 5、CTcpPullClient 用 CItemPool 和 TItemList 实现发送缓冲区和 PULL 缓冲区rn 6、CTcpPullServer 用 CBufferPool 和 TBuffer 实现 PULL 缓冲区rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v3.0.2 更新 ***[/size][/color][/b]rn rn[b]> 把 HP-Socket 编译为动态链接库:[/b]rn -----------------rn 1、应用程序可以通过导入源代码或动态链接库方式使用 HP-Socketrn 2、动态链接库使用方法rn[code=text]方法一:rn-----------------------------------------------------------------------rn(0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn(1) 调用 HP_Create_Xxx() 函数创建 HPSocket 对象rn(2) 使用完毕后调用 HP_Destroy_Xxx() 函数销毁 HPSocket 对象rn rn方法二:rn-----------------------------------------------------------------------rn(0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn(1) 创建 CXxxWrapper 包装器,通过包装器智能指针使用 HPSocket 对象[/code]rn 3、动态链接库发行版本rn rn (1) Bin/x86/HPSocket.dll - (32位/MBCS/Release)rn (2) Bin/x86/HPSocket_D.dll - (32位/MBCS/DeBug)rn (3) Bin/x86/HPSocket_U.dll - (32位/UNICODE/Release)rn (4) Bin/x86/HPSocket_UD.dll - (32位/UNICODE/DeBug)rn (5) Bin/x64/HPSocket.dll - (64位/MBCS/Release)rn (6) Bin/x64/HPSocket_D.dll - (64位/MBCS/DeBug)rn (7) Bin/x64/HPSocket_U.dll - (64位/UNICODE/Release)rn (8) Bin/x64/HPSocket_UD.dll - (64位/UNICODE/DeBug)rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v3.0.1 更新 ***[/size][/color][/b]rn rn[b]> 新增 UDP 通信组件:[/b]rn-----------------rn 1、新增两个 UDP 通信组件:CUdpServer 为服务端组件,CUdpClient 为客户端组件rn 2、服务端组件 CUdpServer 采用 IOCP 通信模型rn 3、客户端组件 CUdpClient 采用 Event Select 通信模型rn 4、UDP 通信组件的接口与原 TCP 通信组件一致,简单实用rn 5、UDP 通信组件内置通信线路自动监测机制rn 6、新增 UDP 通信组件示例工程 TestEcho-UDPrn rn[b]> 代码重构与优化:[/b]rn-----------------rn 1、规范所有接口、类以及代码文件的命名rn 2、重构和优化了大量组件代码rn 3、服务端组件加入读写锁机制,有效平衡处理性能与安全性rn 4、服务端组件的 Socket 对象缓存列表设置了锁定时间,提高访问的安全性rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v2.2.3 更新 ***[/size][/color][/b]rn rn[b]> 连接 ID 的数据类型改为‘CONNID’:[/b]rn-----------------rn 1、在SocketHelper.h 中定义 CONNID 数据类型(默认:typedef ULONG_PTR CONNID)rn 2、应用程序可以把 CONNID 定义为其希望的类型(如:ULONG / ULONGLONG 等)rn 3、为了便于移植与维护,应用程序的任何地方都应该用‘CONNID’类型引用连接 IDrn rn[b]> 服务端 Socket 组件支持为每个连接绑定附加数据:[/b]rn-----------------rn 1、IServerSocket 和 CIocpServer 增加方法 Get/SetConnectionExtra()rn 2、通过上述两个方法,应用程序可以为每个连接绑定任意附加数据并把数据获取出来rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v2.2.2 更新 ***[/size][/color][/b]rn rn[b]> 优化心跳检测相关功能:[/b]rn-----------------rn 1、IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn 2、CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn 3、CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v2.2.1 更新 ***[/size][/color][/b]rn rn[b]> PULL 模型支持:[/b]rn-----------------rn 1、ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn 2、增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rn rn[b]> Server:[/b]rn-----------------rn 1、服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn 2、增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn 3、增加 PULL Server Socket 接口 IPullServerSocketrn 4、增加 PULL Server Socket 实现类 CIocpPullServerrn rn[b]> Client:[/b]rn-----------------rn 1、客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn 2、客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn 3、增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn 4、增加 PULL Client Socket 接口 IPullClientSocketrn 5、增加 PULL Client Socket 实现类 CPullClientSocket
CVM 网络类库(跨平台)
CVM是一个<em>跨平台</em>(现支持Windows和Linux)的小型<em>网络</em>类库,她主要提供多路分离复用、线程池、内存管理、定时器和数据访问功能:多路分离复用:实现IO的异步调用封装,现只提供Socket调用。 线程池:提供一种执行任务的服务,用户只需按照任务接口实现自己任务然后将它放到线程池即可执行任务。 内存管理:实现内存的有效管理,主要有固定(不固定)大小内存池、简单工厂和复杂工厂。 定时器: 实现定时器的管理。 数据访问:实现数据的简单有效访问,主要包括数据库(Mysql)的访问、文件的访问和配置文件的访问。
跨平台网络
<em>跨平台</em><em>网络</em>库集合 几个自己收藏的<em>跨平台</em>c++软件
XSocket-跨平台网络
XSocket是一个简单的Socket可伸缩库,你可以把它编译成动态库、静态库、或者直接包含源文件到你的工程里。 鉴于<em>网络</em>上充斥着各类Socket库,好坏不一,难言好用,本人根据多年从业经验和对设计的精益求精的态度,决定实现XSocket库-简单的Socket可伸缩库。 为了避免各类库的弊病,本人独辟蹊径,使用泛型技术来实现XSocket-简单的Socket可伸缩库。
PF_RING用户指南.V5.4.4
pf_ring是一个高速数据捕获库,附件为中文用户指南,翻译还不错
HP-Socket 3.0.2
========================================================================================== 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、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 示例工程
HP-Socket下载
HP-Socket 是一套通用的<em>高性能</em> TCP/UDP <em>通信框架</em>,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。   为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现<em>跨平台</em>支持。
高性能 Windows Socket 组件 HP-Socket v3.0.1 正式发布
[img=https://img-bbs.csdn.net/upload/201310/29/1382985891_702949.png][/img]rn  [color=#800000]HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/<em>hp-socket</em>]http://www.oschina.net/p/<em>hp-socket</em>[/url]rn------------------------------------------------------------------------------------------------rn[b]通用性[/b]rn  通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rnrn[b]可用性[/b]rn  可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rnrn[b]<em>高性能</em>[/b]rn  作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn  客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn  服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rnrn[b]伸缩性[/b]rn  可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rnrn[size=18px][b][color=#333399]*** v3.0.1 更新 ***[/color][/b][/size]rnrn[b] > 新增 UDP 通信组件:[/b]rn-----------------rn新增两个 UDP 通信组件:CUdpServer 为服务端组件,CUdpClient 为客户端组件rn服务端组件 CUdpServer 采用 IOCP 通信模型rn客户端组件 CUdpClient 采用 Event Select 通信模型rnUDP 通信组件的接口与原 TCP 通信组件一致,简单实用rnUDP 通信组件内置通信线路自动监测机制rn新增 UDP 通信组件示例工程 TestEcho-UDPrnrn[b]> 代码重构与优化:[/b]rn-----------------rn规范所有接口、类以及代码文件的命名rn重构和优化了大量组件代码rn服务端组件加入读写锁机制,有效平衡处理性能与安全性rn服务端组件的 Socket 对象缓存列表设置了锁定时间,提高访问的安全性rnrn[b]> 升级说明:[/b]rn -----------------rn使用 HP-Socket v2.2.3 的应用程序可以安全升级到 HP-Socket v3.0.1rn由于重命名了大量接口、类以及代码文件,因此升级时需要作相应调整rn------------------------------------------------------------------------------------------------rnrn[size=18px][b][color=#333399]*** v2.2.3 更新 ***[/color][/b][/size]rnrn[b]> 连接 ID 的数据类型改为‘CONNID’:[/b]rn-----------------rn 1、在SocketHelper.h 中定义 CONNID 数据类型(默认:typedef ULONG_PTR CONNID)rn 2、应用程序可以把 CONNID 定义为其希望的类型(如:ULONG / ULONGLONG 等)rn 3、为了便于移植与维护,应用程序的任何地方都应该用‘CONNID’类型引用连接 IDrnrn[b]> 服务端 Socket 组件支持为每个连接绑定附加数据:[/b]rn-----------------rn 1、IServerSocket 和 CIocpServer 增加方法 Get/SetConnectionExtra()rn 2、通过上述两个方法,应用程序可以为每个连接绑定任意附加数据并把数据获取出来rnrn[b]> 其它更新:[/b]rn-----------------rn 1、放宽 CIocpServer 的最大 IOCP 工作线程数目限制(64 改为 500)rn 2、服务端 Socket 组件的 Disconnect() 方法增加一个标识参数‘bForce’,指示是否强制断开连接rn 3、调整连接 ID 的生成规则,避免生成数值为 0 的连接 IDrn------------------------------------------------------------------------------------------------rnrn[size=18px][b][color=#333399]*** v2.2.2 更新 ***[/color][/b][/size]rnrn[b]> 优化心跳检测相关功能:[/b]rn -----------------rn 1、IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn 2、CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn 3、CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rn------------------------------------------------------------------------------------------------rnrn[size=18px][b][color=#333399]*** v2.2.1 更新 ***[/color][/b][/size]rnrn[b]> PULL 模型支持:[/b]rn-----------------rn 1、ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn 2、增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rnrn[b]> Server:[/b]rn-----------------rn 1、服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn 2、增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn 3、增加 PULL Server Socket 接口 IPullServerSocketrn 4、增加 PULL Server Socket 实现类 CIocpPullServerrnrn[b]> Client:[/b]rn-----------------rn 1、客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn 2、客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn 3、增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn 4、增加 PULL Client Socket 接口 IPullClientSocketrn 5、增加 PULL Client Socket 实现类 CPullClientSocket  rnrn[b]> 其它更新:[/b]rn-----------------rn 1、增加 PULL Socket 测试程序 TestEcho-Pullrn 2、在 SocketHelper.h (.cpp) 中添加若干帮助结构体
跨平台高性能TCP服务器框架 &boost;
基于boost的asio封装的<em>高性能</em>TCP服务器。asio已经有很好的事件封装机制,只有底层事件,没有针对TCP建立会话机制;也没有多包进行合包,以包为单位的事件提交机制。由于以上多种原因,决定对boost库进行更高的抽象和封装,对开发者提供一种更为便利的使用接口。
LiteApp是一款高性能的移动跨平台实现
LiteApp是一款<em>高性能</em>的移动<em>跨平台</em>实现。<em>跨平台</em>功能的实现基于webview,并提供了不同的想法和解决方案来提高webview的性能。
cpp-tonyenc高性能跨平台的PHP7代码加密扩展
tonyenc:<em>高性能</em>、<em>跨平台</em>的 PHP7 代码加密扩展
高性能网络服务器编程
下面来解释下为什么Linux AIO 和Java AIO都不使用! 基本的IO编程过程(包括<em>网络</em>IO和文件IO): 打开文件描述符(windows是handler,java是stream或channel) 多路捕获(Multiplexe,即select和poll和epoll)IO可读写的状态 可以读写的文件描述符进行IO读写 由于IO设备速度和CPU内存比速度会慢,为了更好的利用CPU和...
高性能网络应用框架 Netty.zip
Netty是一个java开源框架。Netty提供异步的、事件驱动的<em>网络</em>应用程序框架和工具,用以快速开发<em>高性能</em>、高可靠性的<em>网络</em>服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个<em>网络</em>应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了<em>网络</em>应用的编程开发过程,例如,TCP和UDP的socket服务开发。“快速”和“简单”并不意味着会让你的最终应用产生维护性或性能上的问题。Netty 是一个吸收了多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各种二进制,文本协议,并经过相当精心设计的项目,最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。体系结构图在线Javadoc:http://netty.io/wiki/all-documents.html  标签:Netty
[探讨]高性能网络服务器设计
(1)多个IO写线程,1个IO处理线程,应该如何设计,减少锁的次数,提<em>高性能</em>?(云风的BLOG有说,1个IO写线程和1个IO处理线程减少锁次数提<em>高性能</em>的解决方案。)rnrnrn(2)<em>网络</em>IO使用异步方式,如何避免内存频繁的分配和释放?同时给多个客户端发送同样的数据,如何避免内存多次拷贝和复制?(异步方式,数据提交缓冲区后,失败立即返回,成功后有事件通知机制。未返回成功之前,不能够对缓冲区进行操作)rnrnrn请大家尽量畅所欲言。
高性能网络服务程序!
最近写了一个服务程序,使用阻塞方式,开始时工作比较稳定,后来业务多了,常出现好几百个同时连接,服务程序常常崩溃。现在想写一个新的非阻塞的事件驱动方式的服务程序,请大家给点方案和注意事项,要是有参考代码就更加感谢了。
高性能网络系统集成论文
摘 要:<em>网络</em>系统集成是<em>网络</em>工程实施的重要部分,<em>网络</em>系统集成主要包括:了解用户需求、<em>网络</em>需求分析、<em>网络</em>总体设计、<em>网络</em>设备选型与配置、综合布线方案、<em>网络</em>设备管理等方面。 <em>高性能</em><em>网络</em>系统集成是在<em>网络</em>系统集成的基础上加入一些<em>网络</em>方面的技术,使<em>网络</em>能在原有的性能基础上能够更好的实现<em>网络</em>的高效、安全、稳定。在集成<em>网络</em>系统通过对<em>网络</em>设备采取一些技术,如:集群技术、负载均衡、设备冗余、数据备份等,就能完善<em>网络</em>系统,使<em>网络</em>的通信实现无阻塞,不中断,通信的安全、稳定。
高性能网络方案
掌握 Windows Server 2016 中,<em>高性能</em><em>网络</em>技术和解决方案的基本原理和基本配置,包括 NIC 组合,SMB 多通道,RSS,vRSS,虚拟机队列,SR-IOV,数据中心桥接,RDMA。
MyEclipse 7.0 快捷键大全下载
MyEclipse 7.0快捷键大全 好用哦 相关下载链接:[url=//download.csdn.net/download/mlh115101/2761693?utm_source=bbsseo]//download.csdn.net/download/mlh115101/2761693?utm_source=bbsseo[/url]
MFC mfckongjian下载
MFC MFC mfc KONGJIAN kongjian 相关下载链接:[url=//download.csdn.net/download/andylau6677/3905060?utm_source=bbsseo]//download.csdn.net/download/andylau6677/3905060?utm_source=bbsseo[/url]
学生信息管理系统源代码下载
*----------学生信息管理系统----------*; 1.录入信息 2.显示全部学生 3.计算平均成绩 4.删除一个学生 5.按年级输出学生信息 6.按性别输出学生信息 7.按姓名检索学生 8.按总分排序 相关下载链接:[url=//download.csdn.net/download/one4free/4155523?utm_source=bbsseo]//download.csdn.net/download/one4free/4155523?utm_source=bbsseo[/url]
我们是很有底线的