高性能 TCP & UDP 通信框架 HP-Socket v5.1.1 for Windows [问题点数:100分]

Bbs2
本版专家分:187
结帖率 96.2%
Bbs1
本版专家分:0
Bbs1
本版专家分:10
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs2
本版专家分:303
Bbs9
本版专家分:87215
Blank
状元 2017年 总版技术专家分年内排行榜第一
Blank
榜眼 2014年 总版技术专家分年内排行榜第二
Blank
探花 2013年 总版技术专家分年内排行榜第三
Blank
进士 2018年总版新获得的技术专家分排名前十
2012年 总版技术专家分年内排行榜第七
Bbs6
本版专家分:9108
Bbs12
本版专家分:361059
版主
Blank
名人 2013年 荣获名人称号
Blank
探花 2011年 总版技术专家分年内排行榜第三
2010年 总版技术专家分年内排行榜第三
Blank
进士 2012年 总版技术专家分年内排行榜第五
Blank
金牌 2012年1月 总版技术专家分月排行榜第一
Bbs12
本版专家分:433021
版主
Blank
榜眼 2009年 总版技术专家分年内排行榜第二
2005年 总版技术专家分年内排行榜第二
Blank
进士 2018年总版新获得的技术专家分排名前十
Blank
银牌 2009年7月 总版技术专家分月排行榜第二
2009年3月 总版技术专家分月排行榜第二
2009年1月 总版技术专家分月排行榜第二
2005年7月 总版技术专家分月排行榜第二
2005年5月 总版技术专家分月排行榜第二
2005年3月 总版技术专家分月排行榜第二
Blank
优秀版主 优秀小版主
2015年8月优秀小版主
2015年9月优秀小版主
2015年5月优秀小版主
2015年2月论坛优秀版主
Bbs5
本版专家分:2109
Bbs1
本版专家分:0
Bbs2
本版专家分:187
Bbs7
本版专家分:10635
Bbs7
本版专家分:14700
Bbs1
本版专家分:0
Bbs7
本版专家分:29442
版主
Blank
优秀版主 2014年11月论坛优秀版主
Blank
黄花 2013年12月 VC/MFC大版内专家分月排行榜第二
Blank
蓝花 2014年2月 VC/MFC大版内专家分月排行榜第三
2013年11月 VC/MFC大版内专家分月排行榜第三
Bbs7
本版专家分:29442
版主
Blank
优秀版主 2014年11月论坛优秀版主
Blank
黄花 2013年12月 VC/MFC大版内专家分月排行榜第二
Blank
蓝花 2014年2月 VC/MFC大版内专家分月排行榜第三
2013年11月 VC/MFC大版内专家分月排行榜第三
高性能 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 通信框架,包含服务端组件、客户端组件和 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 平台,将来会实现跨平台支持。[/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/hp-socket/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 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/hp-socket]http://www.oschina.net/p/hp-socket[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/hp-socket/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 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 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/hp-socket]http://www.oschina.net/p/hp-socket[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/hp-socket/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------------------------------------------------------------------------------------------------
关于linux下高性能TCP server的设计主题
请大家发表自己的看法。rn特别是针对HTTP server这种server的设计。rn
高性能数据中心(高性能数据中心)
<em>高性能</em>数据中心 <em>高性能</em>数据中心 <em>高性能</em>数据中心
高性能mysql笔记-高性能索引
<em>高性能</em>索引 写在开头一些重要的话,如题<em>高性能</em>的索引。现在很多文章或者博客都会有一些索引建立的规则。 比如说程序员必须掌握的10条SQL技巧,你不知道的SQL10条索引规则。 而且这些文章的阅读量比其他讲原理性的要高。能够体现出如今码农们急躁的心理。想通过这些技巧就掌握 索引优化。举个明显的例子,前导模糊查询不能使用索引 select * from order where desc l...
《Linux高性能服务器编程》第1章:TCP/IP协议族
文章目录一、TCP/IP协议族体系结构以及主要协议(1)上层协议使用下层协议提供的服务1.数据链路层(1)数据链路层实现了网卡接口的网络驱动程序(2)常用协议是:ARP和RARP协议2.网络层(1)网络层的任务(2)核心协议是:IP协议,重要协议是:ICMP协议3.传输层(1)传输层与网络层的区别(2)主要协议:TCP、UDP、SCTP协议(a)TCP协议的总结(b)UDP协议的总结4.应用层(1...
高性能 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 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/hp-socket]http://www.oschina.net/p/hp-socket[/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 的局域网内高性能文件传输系统设计与实现
本项目开发基于 Red Hat Enterprise Linux(RHEL) 6.3 平台 ,通过本项目大家会深入理解下述内容:n1. Socket 网络编程技术n2. 基于TCP/IP 协议的网络编
HAProxy TCP、HTTP高性能负载均衡Centos下安装及配置(含范例)
HAProxy TCP、HTTP<em>高性能</em>负载均衡安装及配置(含范例) 1、下载地址:http://www.haproxy.org/#down 当前最终版:1.8,源码地址:http://www.haproxy.org/download/1.8/src/haproxy-1.8.12.tar.gz 本地保存地址:D:\开发工具\HAProxy负载均衡\haproxy-1.8.12.tar.gz 2、...
LVS高性能高可用:TCP socket bind failed. Reschedu....
![图片说明](https://img-ask.csdn.net/upload/201706/28/1498611021_719097.png)rnrn以下是代理机的配置:rnrn1、yum -y install keepalivedrnrn2、> /etc/keepalived/keepalived.confrnrn3、vi /etc/keepalived/keepalived.confrnrnrnrnrn```rnrnglobal_defs rn router_id LVS_DEVELrnrnrnvrrp_instance VI_1 rn state MASTERrn interface ens32 # 虚拟ip所在的网卡rn virtual_router_id 51 # 标识ID,请务必保证内网唯一性,和备机必须一致!rn priority 100 # 权重需比备机高rn advert_int 1 # 主备检测间隔 rnrn # 主备通信密码,必须一致rn authentication rn auth_type PASSrn auth_pass 1111rn rn virtual_ipaddress rn 192.168.43.200 # 多个需换行填写 rn rnrnrnvirtual_server 192.168.43.200 8080 rn delay_loop 6 # 每隔6秒检测Realserver健康状况rn lb_algo rrrn lb_kind DR # 采用DR模式,即直接路由,其他还有TUN和NAT两种模式rn nat_mask 255.255.255.0rn persistence_timeout 1 # #会话保持时间,相当于session 保持时间rn protocol TCPrnrn real_server 192.168.43.31 8080 # 第一个realserver,请注意80和后面 之间有个空格!rn weight 1 # 权重rn TCP_CHECK rn connect_timeout 10 # 超时10秒,则失败 rn nb_get_retry 3 # 失败重试次数rn delay_before_retry 3 # 重试间隔时间 rn rn rnrn real_server 192.168.43.32 8080 rn weight 1rn TCP_CHECK rn connect_timeout 10 # 超时10秒,则失败 rn nb_get_retry 3 # 失败重试次数rn delay_before_retry 3 # 重试间隔时间 rn rn rnrn rn```rnrn4、rn启动服务rnsystemctl start keepalived.servicernrnrnrnrnrnrn**# 问题描述:**rnrnrnrnrn 可以实现转发,但无法实现负载均衡和故障转移rnrnrnrnrn
Nginx服务器安装,高性能的HTTP、TCP、反向代理、负载均衡等服务和配置
warmtips more: https://github.com/timespacegroup 1.安装参数: ubuntu: 14.04.5; nginx: 1.12.0 2:下载安装包 http://nginx.org/en/download.html ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ wget ...
高性能 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 通信框架,包含服务端组件、客户端组件和 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 平台,将来会实现跨平台支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/hp-socket]http://www.oschina.net/p/hp-socket[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/hp-socket/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 通信框架 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 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/hp-socket]http://www.oschina.net/p/hp-socket[/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.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 通信框架,包含服务端组件、客户端组件和 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 平台,将来会实现跨平台支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/hp-socket]http://www.oschina.net/p/hp-socket[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/hp-socket/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------------------------------------------------------------------------------------------------
rudp 高性能,可靠性传输UDP网络库(远胜TCP)
rudp <em>高性能</em>,可靠性传输UDP网络库(远胜TCP)
dotnet-beetleX是基于dotnetcore实现的轻量级高性能的TCP通讯组件
beetleX是基于dotnet core实现的轻量级<em>高性能</em>的TCP通讯组件,使用方便、性能高效和安全可靠是组件设计的出发点!开发人员可以在Beetlx组件的支持下快带地构建<em>高性能</em>的TCP通讯服务程序,在安全通讯方面只需要简单地设置一下SSL信息即可实现可靠安全的SSL服务。
高性能 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 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/hp-socket]http://www.oschina.net/p/hp-socket[/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]------------------------------------------------------------------------------------------------
《Linux高性能服务器编程》学习笔记(一)--tcp/ip协议族
TCP/IP协议族 图解 封装 图解 分用 图解 以太网帧格式 图解 ARP协议结构详解 图解 ARP框架整理 图解 注:需要该.xmind文件,可自行下载ARP框架图.xmind DNS工作原理 ①输入域名后,现在本机对应的域名服务器中查找 ②域名服务器先查找自己的数据库中的数据,如果没有...
Linux下高性能网络编程中的几个TCP/IP选项
[url]http://blog.chinaunix.net/u3/103668/showart.php?id=2075554[/url]
分享NodeJs中TCP粘包、分包高性能解决方案
最新更新请查看github NodeJs中TCP粘包、分包解决方案! 配置介绍 1. 本类库提供对TCP粘包处理的解决方案 2. 本库默认缓冲512个字节,当接收数据超过512字节,自动以512倍数扩大缓冲空间 3. 本库默认采用包头两个字节表示包长度 4. 本库默认采用大端接模式接收数据 5. 本库可以配置自定义包头长度[后期迭代]...
高性能 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 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=http://www.oschina.net/p/hp-socket]http://www.oschina.net/p/hp-socket[/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/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 通信框架,包含服务端组件、客户端组件和 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 平台,将来会实现跨平台支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/hp-socket]http://www.oschina.net/p/hp-socket[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/hp-socket/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------------------------------------------------------------------------------------------------
请教一个高性能TCP连接服务器端的问题。
有这样一个需求,在服务器上监听着一个端口,大概有1000个以上的客户端会和服务器保持TCP长连接。rnrn他们直接的通讯量不是很大,平时主要是心跳包比较多,但偶尔会出现需要同时给这1000个客户端发信息的情况。rnrn现在客户端的数量不是很多,我目前的做法是,服务器端每监听到一个新连接,就开一个线程,负责和客户端通讯,同时这个线程不断的查询数据库,如果有需要发送的信息,就发下去。rnrn如果将来客户端多了,请问这样的模式需要如何改进?另外对服务器硬件有没有什么特殊要求?rnrn我担心的主要有:rnrn1,一个程序中开上千甚至上万个线程,是否会有问题?rn2,同时有上千个线程去查询数据库,似乎数据库支持不了这么多连接吧?(SQL Server 2000)rn3,同时有上千甚至上万个客户端,服务器端的SOCKET要怎么写呢,是不是要用到完成端口之类的?网游的服务器一般能接受多少个连接呢?rn4,如果用C#,能否完成上述工作?我目前用的就是C#。
高性能 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 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。rn  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。[/color]rnrn * HP-Socket 官方网站:[url=http://www.jessma.org]http://www.jessma.org[/url]rn * HP-Socket 项目主页:[url=http://www.oschina.net/p/hp-socket]http://www.oschina.net/p/hp-socket[/url]rn * HP-Socket 开发文档:[url=http://www.oschina.net/action/project/go?id=25210&p=doc]http://www.oschina.net/p/hp-socket/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------------------------------------------------------------------------------------------------
tcptcptcp
<em>tcp</em>,<em>tcp</em>,t<em>tcp</em>,<em>tcp</em>,<em>tcp</em>c<em>tcp</em>,<em>tcp</em>,<em>tcp</em>p,<em>tcp</em>,<em>tcp</em><em>tcp</em><em>tcp</em><em>tcp</em><em>tcp</em>,<em>tcp</em>,<em>tcp</em>,<em>tcp</em>,<em>tcp</em>,<em>tcp</em>,<em>tcp</em>
高性能Linux:TCP/IP内核参数调优之Linux TCP内核参数解析
内核参数
高性能Linux:TCP/IP内核参数调优之TCP窗口扩大因子(TCP Window Scaling)选项(理论篇)
TCP报文头部窗口字段介绍 在TCP报文头部,有一个16比特的窗口字段,用来表示接受方的缓冲区大小,发送方可以根据这个值的大小来调节发送的数据量,从而起到流控的目的。 T C P的流量控制由连接的每一端通过声明的窗口大小来提 供 。窗口大小为字节数 ,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16 bit字段,因而窗口大小最大为65535字节。 ...
高性能MySQL】第五章创建高性能的索引
5.1 索引的基础
GPU高性能编程实战 GPU高性能编程实战
GPU<em>高性能</em>编程CUDA实战 GPU<em>高性能</em>编程CUDA实战 GPU<em>高性能</em>编程CUDA实战
深入理解Mysql——高性能索引与高性能SQL
相关文章: 深入理解Mysql——<em>高性能</em>索引与<em>高性能</em>SQL 深入理解Mysql——锁、事务与并发控制(辟谣) 深入理解Mysql——schema设计与大表alter操作 mysql explain-output 译文 从理解磁盘IO开始 主轴让磁盘盘片转动,然后传动手臂可伸展让读取头在盘片上进行读写操作。每个盘片有两面,都可记录信息,所以一张盘片对应着两个磁头。 磁盘物理结构如下...
高性能数据加密
这是一款用 Visual C#.NET 2005 开发的一个数据加密软件。里面集成了 DES、RIJNDAEL(AES)、RSA、DSA、MD5、SHA-1 六种数据<em>高性能</em>加密功能
高性能HTML5
<em>高性能</em>HTML5
高性能linux服务器
很好的<em>高性能</em>linux服务器的文档,希望对大家有帮助。
高性能mysql-pdf
<em>高性能</em>mysql <em>高性能</em>mysql <em>高性能</em>mysql <em>高性能</em>mysql <em>高性能</em>mysql <em>高性能</em>mysql <em>高性能</em>mysql <em>高性能</em>mysql <em>高性能</em>mysql <em>高性能</em>mysql
高性能的linux集群
<em>高性能</em>的linux集群,通俗易懂的讲解集群,并实践集群,简单易懂
高性能并行计算
"<em>高性能</em>并行计算"课程讲义 第一部分并行计算基础 第一章预备知识 1.1 并行计算的目标和内容. . . . . . . . . . . . . . . . . . 5 1.2 并行计算机发展历程. . . . . . . . . . . . . . . . . . . 6 1.2.1 计算机系统发展简史. . . . . . . . . . . . . . . . . . 6 1.2.2 并行计算机发展简述. . . . . . . . . . . . . . . . . . 7 1.3 目前世界<em>高性能</em>计算机的状况. . . . . . . . . . . . . . . 9 1.4 可扩展的并行计算机体系结构. . . . . . . . . . . . . . . 11 1.4.1 对称多处理机系统. . . . . . . . . . . . . . . . . . . 11 1.4.2 分布共享存储处理机系统. . . . . . . . . . . . . . . . 13 1.4.3 大规模并行计算机系统. . . . . . . . . . . . . . . . . 14 1.4.4 机群系统. . . . . . . . . . . . . . . . . . . . . . . 15 1.5 国内外超级计算中心状况. . . . . . . . . . . . . . . . . 16 1.5.1 美国超级计算中心简介. . . . . . . . . . . . . . . . . 16 1.5.2 中国大陆超级计算中心简介. . . . . . . . . . . . . . . 17 第二章基础并行算法 2.1 并行计算基本概念. . . . . . . . . . . . . . . . . . . . 21 2.2 并行算法设计基本原则. . . . . . . . . . . . . . . . . . 22 2.3 区域分解方法. . . . . . . . . . . . . . . . . . . . . . 23 2.4 功能分解方法. . . . . . . . . . . . . . . . . . . . . . 24 2.5 流水线技术. . . . . . . . . . . . . . . . . . . . . . . 25 2.6 分而治之方法. . . . . . . . . . . . . . . . . . . . . . 27 2.7 同步并行算法. . . . . . . . . . . . . . . . . . . . . . 27 2.8 异步并行算法. . . . . . . . . . . . . . . . . . . . . . 28 2.9 作业. . . . . . . . . . . . . . . . . . . . . . . . . . 28 第二部分并行算法设计与实现 第三章矩阵并行计算 3.1 并行矩阵乘法. . . . . . . . . . . . . . . . . . . . . . 32 3.1.1 串行矩阵乘法. . . . . . . . . . . . . . . . . . . . . 32 3.1.2 行列划分算法. . . . . . . . . . . . . . . . . . . . . 33 3.1.3 行行划分算法. . . . . . . . . . . . . . . . . . . . . 33 3.1.4 列列划分算法. . . . . . . . . . . . . . . . . . . . . 34 3.1.5 列行划分算法. . . . . . . . . . . . . . . . . . . . . 35 3.1.6 Cannon 算法. . . . . . . . . . . . . . . . . . . . . .35 3.2 线性代数方程组并行求解方法. . . . . . . . . . . . . . . 36 3.2.1 分布式系统的并行LU 分解算法. . . . . . . . . . . . . .37 3.2.2 三角方程组的并行解法. . . . . . . . . . . . . . . . . 38 3.3 对称正定线性方程组的并行解法. . . . . . . . . . . . . . 41 3.3.1 Cholesky 分解列格式的并行计算. . . . . . . . . . . . .41 3.3.2 双曲变换Cholesky 分解. . . . . . . . . . . . . . . . .42 3.3.3 修正的双曲变换Cholesky 分解. . . . . . . . . . . . . .44 3.4 三对角方程组的并行解法. . . . . . . . . . . . . . . . ..46 3.5 经典迭代算法的并行化. . . . . . . . . . . . . . . . . . 47 3.5.1 Jacobi 迭代法. . . . . . . . . . . . . . . . . . . . .47 3.5.2 Gauss-Seidel 迭代法. . . . . . . . . . . . . . . . . .48 3.6 异步并行迭代法. . . . . . . . . . . . . . . . . . . . . 49 3.6.1 异步并行迭代法基础. . . . . . . . . . . . . . . . . . 49 3.6.2 线性迭代的一般收敛性结果. . . . . . . . . . . . . . . 50 3.7 代数特征值问题的并行求解. . . . . . . . . . . . . . . . 51 3.7.1 对称三对角矩阵特征值问题. . . . . . . . . . . . . . . 51 3.7.2 Householder 变换. . . . . . . . . . . . . . . . . . . 52 3.7.3 化对称矩阵为三对角矩阵. . . . . . . . . . . . . . . . 53 3.8 作业. . . . . . . . . . . . . . . . . . . . . . . . . . 53 第三部分并行实现 第四章并行程序设计 4.1 并行编程模式的主要类型. . . . . . . . . . . . . . . . . 57 4.2 并行程序的基本特点. . . . . . . . . . . . . . . . . . . 57 4.3 并行程序的实现技术. . . . . . . . . . . . . . . . . . . 57 第五章消息传递编程接口MPI 5.1 MPI 简介. . . . . . . . . . . . . . . . . . . . . . . . 59 5.2 MPI 程序实例. . . . . . . . . . . . . . . . . . . . . . 59 第六章MPI 并行环境管理函数. . . . . . . . . . . . . . . . . 63 第七章MPI 进程控制函数 7.1 MPI 进程组操作函数. . . . . . . . . . . . . . . . . . . 65 7.2 MPI 通信子操作. . . . . . . . . . . . . . . . . . . . . 68 第八章MPI 点到点通信函数 8.1 阻塞式通信函数. . . . . . . . . . . . . . . . . . . . . 71 8.2 非阻塞式通信函数. . . . . . . . . . . . . . . . . . . . 77 8.3 特殊的点到点通信函数. . . . . . . . . . . . . . . . . . 82 8.4 MPI 的通信模式. . . . . . . . . . . . . . . . . . . . . 84 第九章MPI 用户自定义的数据类型与打包 9.1 用户定义的数据类型. . . . . . . . . . . . . . . . . . . 87 9.2 MPI 的数据打包与拆包. . . . . . . . . . . . . . . . . . 93 第十章MPI 聚合通信 10.1 障碍同步. . . . . . . . . . . . . . . . . . . . . . . .97 10.2 单点与多点通信函数. . . . . . . . . . . . . . . . . .. 99 10.3 多点与多点通信函数. . . . . . . . . . . . . . . . . . .103 第十一章MPI全局归约操作. . . . . . . . . . . . . . . . . . 107 第十二章HPL程序实例剖析. . . . . . . . . . . . . . . . . . 117 参考文献. . . . . . . . . . . . . . . . . . . . . . . . . .119 附录一并行程序开发工具与<em>高性能</em>程序库. . . . . . . . . . . .121 A.1 BLAS、LAPACK、ScaLAPACK .. . . . . . . . . . . . . . . .121 A.2 FFTW . . . . . . . . . . . . . . . . . . . . . . . . . .121 A.3 PETSc . . . . . . . . . . . . . . . . . . . . . . . . . 121 附录二MPI函数reference. . . . . . . . . . . . . . . . . . . 123 索引. . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
高性能存储芯片
<em>高性能</em>存储芯片,仅供参考,粗略的了解一下吧!!!
高性能服务器架构
高并发服务器架构     1. 请求队列 + 连接池 2. 主要的业务逻辑挪到应用服务器处理,数据库只做辅助的业务处理 3. 缓存 4. 缓存更新(同步),缓存失效(time out),重新去数据库中查询,实时性较差 5. 一旦数据库中数据更新,立即通知前端缓存更新,实时性较好 6. 缓存换页(内存不够,将不活跃数据换出内存),FIFO(先进先出),LRU(最近最少使用least
高性能之javascript
《<em>高性能</em>javascript》   1.      javascript的最初目的是改善网页用户的体验,早期的javascript为互联网用户节省了很多时间。 2.      javascript代码的增长,IE6的javascript引擎吃不消,原因是它的“静态垃圾回收机制”,javascript开发人员和web应用在发展,而IE6的javascript引擎木有发展。 3.      ...
高性能串口转以太网模块
WIZnet<em>高性能</em>以太网模块有以下几个系列: – W5500S2E 系列 • W5500S2E-S1, W5500S2E-Z1, W5500S2E-R1 – W7500S2E 系列 • W7500S2E-Z1, W7500S2E-R1, W7500S2E-C1 <em>高性能</em>以太网模块特点:W5500S2E系列 • 支持Modbus RTU/ASCII转Modbus TCP/UDP • 支持Modbus...
高性能消息队列
最近,在为我的游戏服务器进行性能优化,而我在性能优化的过程中,首先是减少程序中锁的使用,一眼过去,发现消息队列是线程之前争锁之常地。虽然我们使用的是并发包里,性能高的并发队列(服务器是用java语言),虽然并发包在锁的设计上到了最优,采用细粒度加速,但是不可否认,在生成线程和消费线程之间的锁争用总是会消耗一定性能,降低效率。 说干就干,动手设计一个更<em>高性能</em>的消息队列。可是该如何动手呢...
高性能mysql
<em>高性能</em>mysql你懂的,不管是dba还是开发、运维、测试的同志都是必备书籍
MySQL高性能
前言 第1章MySQL架构与历史1 1.1MySQL逻辑架构1 1.1.1连接管理与安全性2 1.1.2优化与执行3 1.2并发控制3 1.2.1读写锁4 1.2.2锁粒度4 1.3事务6 1.3.1隔离级别8 1.3.2死锁9 1.3.3事务日志10 1.3.4MySQL中的事务10 1.4多版本并发控制12 1.5MySQL的存储引擎13 1.5.1In
高性能JavaScript
《<em>高性能</em>JavaScript》是2010年电子工业出版社出版的图书,作者是泽卡斯(NicholasC.Zakas)。 《<em>高性能</em>JavaScript》揭示的技术和策略能帮助你在开发过程中消除性能瓶颈。你将会了解如何提升各方面的性能,包括代码的加载、运行、DOM交互、页面生存周期等。雅虎的前端工程师Nicholas C. Zakas和其他五位JavaScript专家介绍了页面代码加载的最佳方法和编程技巧,来帮助你编写更为高效和快速的代码。你还会了解到构建和部署文件到生产环境的最佳实践,以及有助于定位线上问题的工具。
高性能JavaScript.pdf
<em>高性能</em>JavaScript.pdf
高性能javascript.pdf
<em>高性能</em>javascript.pdf
高性能的mysql
1.慢查询日志      long_query_time    担心日志会消耗大量的磁盘空间,    如果长期开启慢查询日志, 需要部署日志轮转(long rotation)工具,也可以不要长期开启日志
高性能WEB开发
-
高性能java代码
1,尽早释放无用对象的引用.即在不使用对象的引用后设置为空,可以加速GC的工作.(当然如果是返回值.....)   2,尽量少用finalize函数,此函数是JAVA给程序员提供的一个释放对象或资源的机会,但是却会加大GC工作量.   3,如果需要使用到图片,可以使用soft应用类型,它可以尽可能将图片读入内存而不引起OutOfMemory.   4...
高性能服务器开发
我想问问 游戏服务器都是怎么做的?需要掌握哪些技术呢?我想问C++编程方面的
高性能Mysql.xmind
读书笔记,自己写的,方便以后网络查看。知识共享 11
高性能MYSQL
<em>高性能</em>MYSQL中文第二版,mysql玩家必看经典书籍
高性能msyql
<em>高性能</em>msyql第三版,高清版,非扫描版。请放心下载。
高性能Mysql.part2.pdf
<em>高性能</em>Mysql.part2.pdf,<em>高性能</em>Mysql.part2.pdf
高性能Android应用开发
<em>高性能</em>Android应用开发................................
高性能MySQL
<em>高性能</em>MySQL第三版,高清PDF,既适合初学者,也对开发有帮助
高性能HTML5.pdf
<em>高性能</em>html5,非常不错的一本书,推荐学习和工作中用到HTML5的朋友,如果感觉不错,请支持正版。
高性能Docker.pdf
<em>高性能</em>Docker
高性能mysql笔记(七)高性能的索引策略
介绍几个高效的索引方式1.独立的列独立列值索引列不能是一个表达式select actor_id from sakila.cator where actor_id + 1 = 5; 这样的方式是用不到索引的。2.前缀索引和索引的选择性有时候索引很长的字符列,这回让索引变得大且慢,这时候可以建立一个前缀索引。alter table city add key (city(7)); 可以用这样的方式计算前缀
高性能的MySQL索引
索引是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量很大时,索引对性能的影响就越大。虽然索引对数据库性能而言如此重要,但好多使用其的人却常常忽视它。本片博文就是为大家介绍一些MySQL索引相关的知识1.认识索引 要理解MySQL中的索引是如何工作的,最简单的方法就是看一下我们书里的目录(索引)部分,我们根据目录来找到其某个内容在哪个章节,锁定某个章之后,
高性能sql
1)SQL尽量不用order by语句。尽量使用DataStore中sort方法。(2)使用EXIST代替IN可能会提<em>高性能</em>,但并非所有情况都适用。具体要依据测试结果而定。示例://一般情况下,效率较低。select …from empwhere empno&amp;gt; 0and deptno in (select deptno from dept ...
高性能之网站建设
《<em>高性能</em>网站建设指南》   1.      项目三角:时间、质量、成本。往往3取2 2.      运行最大开销是DOM,不是javascript。酷炫体验只在确定改善用户体验时用,而不是应用于功能和可用性的缺陷 3.      0.1秒:用户操作的极限 4.      Javascript文件外部引入比内嵌好 5.      循环时,将长度的设置放于循环外 6.      在不删...
iOS-高性能
UIApplicationDelegate 中两个值得注意的地方 这个知识点可以用于面试,以及对于一些对初始化时机有要求的 SDK 配置的 bug 排查。 答案是会的,应用从 active 状态至 suspended 状态,是必须经过 background 状态的,我们应该按照官方规范,在 applicationDidEnterBackg...
高性能线程池
测试中: 30W/s 支持无限制参数 增加参数快速查询 支持处理前回调 和处理完毕时回调 自动识别CPU机制 当然 是根据负载识别 如果觉得可以 请联系: 547171911 代码转前请保留作者信息 否则将追求代码所有权
Nginx_Web_高性能
Nginx_Web_<em>高性能</em> Nginx_Web_<em>高性能</em> Nginx_Web_<em>高性能</em> Nginx_Web_<em>高性能</em>
高性能网站建设
<em>高性能</em>网站建设
非常有用的自适应信号处理答案下载
非常好的英文版自适应信号处理的习题答案,是自适应信号处理的权威书籍,haykin的书 相关下载链接:[url=//download.csdn.net/download/xuhaixiang2009/2020624?utm_source=bbsseo]//download.csdn.net/download/xuhaixiang2009/2020624?utm_source=bbsseo[/url]
机械课程设计中的齿轮参数计算下载
该小软件可用于机械课程设计中的齿轮参数计算 相关下载链接:[url=//download.csdn.net/download/lwz928/2729532?utm_source=bbsseo]//download.csdn.net/download/lwz928/2729532?utm_source=bbsseo[/url]
登陆器升级配置文件格式下载
[Update] ;注意:此处的版本号和配置器中的更新版本号必须一致,否则会导致无法更新或者重复更新. ;第一次配置是建议更新版本号设置1.00,等有了新版本的登录器时,重新配置更新版本号1.01 ;把配置好的登录器放在下面DownFile指定的位置,玩家启动老版本的登录器时自动检查 ;update.txt中是否设置了可更新的登录器,如果有并且版本号不一致时自动更新为新版本的 ;登录器.更新版本号建议每次加1,例如1.01 1.02 1.03 1.04等等 VerNo=1.01 ;指定登陆器下载位置,可以任意设定. DownFile=http://www.HEROm2.com/GameLogi 相关下载链接:[url=//download.csdn.net/download/mexshan/3152136?utm_source=bbsseo]//download.csdn.net/download/mexshan/3152136?utm_source=bbsseo[/url]
相关热词 c#串口测试应用程序 c# 匹配 正则表达式 c#防止窗体重绘 c#读写txt文件 c#挖地雷源代码 c#弹框选项 c# 移除 队列 c# 密码写入配置文件 c# 获取可用内存大小 c# 嵌入excel编辑
我们是很有底线的