高性能网络通信框架 HP-Socket
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。
为了能帮助学习C/C++的伙伴,博主推荐一个学习交流qun 710 -520- 381 编号 灵狐 还有免费资料可以领取
为了让使用者能方便快速地学习和使用 HP-Socket ,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、PACK 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前支持 Windows 和 Linux 平台。
HP-Socket 的设计充分注重功能、通用型、易用性与伸缩性:
通用性
HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。
HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了HP-Socket的接口规范都可以无缝整合 HP-Socket。
易用性
易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。
HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。
HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 应用程序可以灵活选择以手工方式、 半自动方式或全自动方式处理封解包, PULL / PACK 接收模型在降低封解包处理复杂度的同时能大大减少出错几率。
高性能
Server 组件:基于IOCP / EPOLL通信模型,并结合缓存池、私有堆等技术实现高效内存管理,支持超大规模、高并发通信场景。
Agent 组件:Agent组件实质上是Multi-Client组件,与Server组件采用相同的技术架构。一个Agent组件对象可同时建立和高效处理大规模Socket连接。
Client 组件:基于Event Select / POLL通信模型,每个组件对象创建一个通信线程并管理一个Socket连接,适用于小规模客户端场景。
伸缩性
应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。
工作流程
创建监听器对象
创建组件对象(并绑定监听器)
启动组件
连接远程主机(仅用于Agent组件)
处理通信事件(OnConnect/OnReceive/OnClose ......)
停止组件(可选,第7步销毁组件对象前会先停止组件)
销毁组件对象
销毁监听器对象
示例代码
C++
- #include "hpsocket/HPSocket.h"
- /* Listener Class */
- class CListenerImpl : public CTcpPullServerListener
- {
- public:
- // 5. process network events
- virtual EnHandleResult OnPrepareListen(ITcpServer* pSender, SOCKET soListen);
- virtual EnHandleResult OnAccept(ITcpServer* pSender, CONNID dwConnID, UINT_PTR soClient);
- virtual EnHandleResult OnHandShake(ITcpServer* pSender, CONNID dwConnID);
- virtual EnHandleResult OnReceive(ITcpServer* pSender, CONNID dwConnID, int iLength);
- virtual EnHandleResult OnSend(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength);
- virtual EnHandleResult OnClose(ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode);
- virtual EnHandleResult OnShutdown(ITcpServer* pSender);
- };
- int main(int argc, char* const argv[])
- {
- // 1. Create listener object
- CListenerImpl s_listener;
- // 2. Create component object (and binding with listener object)
- CTcpPullServerPtr s_pserver(&s_listener);
- // 3. Start component object
- if(!s_pserver->Start("0.0.0.0", 5555))
- exit(1);
- /* wait for exit */
- // ... ...
- // 6. (optional) Stop component object
- s_pserver->Stop()
- return 0;
- // 7. Destroy component object automatically
- // 8. Destroy listener object automatically
- }
C
- #include "hpsocket/HPSocket4C.h"
- // 5. process network events
- EnHandleResult __HP_CALL OnConnect(HP_Agent pSender, HP_CONNID dwConnID);
- EnHandleResult __HP_CALL OnReceive(HP_Agent pSender, HP_CONNID dwConnID, int iLength);
- EnHandleResult __HP_CALL OnSend(HP_Agent pSender, HP_CONNID dwConnID, const BYTE* pData, int iLength);
- EnHandleResult __HP_CALL OnClose(HP_Agent pSender, HP_CONNID dwConnID, En_HP_SocketOperation enOperation, int iErrorCode);
- EnHandleResult __HP_CALL OnShutdown(HP_Agent pSender);
- int main(int argc, char* const argv[])
- {
- HP_TcpPullAgentListener s_listener;
- HP_TcpPullAgent s_agent;
- // 1. Create listener object
- s_listener = ::Create_HP_TcpPullAgentListener();
- // 2. Create component object (and binding with listener object)
- s_agent = ::Create_HP_TcpPullAgent(s_listener);
- /* Set listener callbacks */
- ::HP_Set_FN_Agent_OnConnect(s_listener, OnConnect);
- ::HP_Set_FN_Agent_OnSend(s_listener, OnSend);
- ::HP_Set_FN_Agent_OnPullReceive(s_listener, OnReceive);
- ::HP_Set_FN_Agent_OnClose(s_listener, OnClose);
- ::HP_Set_FN_Agent_OnShutdown(s_listener, OnShutdown);
- // 3. Start component object
- if(::HP_Agent_HasStarted(s_agent))
- exit(1);
- // 4. Connect to dest host
- ::HP_Agent_Connect(s_agent, "remote.host.1", REMOTE_PORT_1, nullptr);
- ::HP_Agent_Connect(s_agent, "remote.host.2", REMOTE_PORT_2, nullptr);
- ::HP_Agent_Connect(s_agent, "remote.host.3", REMOTE_PORT_3, nullptr);
- /* wait for exit */
- // ... ...
- // 6. (optional) Stop component object
- ::HP_Agent_Stop(s_agent)
- // 7. Destroy component object
- ::Destroy_HP_TcpPullAgent(s_agent);
- // 8. Destroy listener object
- ::Destroy_HP_TcpPullAgentListener(s_listener);
- return 0;
- }
组件列表
基础组件
SSL组件
HTTP组件
高性能网络通信框架 HP-Socket的更多相关文章
- 高性能网络通信框架 HP-Socket v5.2.1
项目主页 : http://www.oschina.net/p/hp-socket 开发文档 : http://www.docin.com/p-2079016612.html 下载地址 : https ...
- 【新年呈献】高性能网络通信框架 HP-Socket v5.7.1
项目主页 : http://www.oschina.net/p/hp-socket 开发文档 : https://www.docin.com/p-2287339564.html 下载地址 : http ...
- 手动搭建I/O网络通信框架2:Socket和ServerSocket入门实战,实现单聊
第一章:手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊 在第一章中运用Socket和ServerSocket简单的实现了网络通信.这一章,利用BIO编程模型进行 ...
- 手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊
资料:慕课网 第二章:手动搭建I/O网络通信框架2:Socket和ServerSocket入门实战,实现单聊 这个基础项目会作为BIO.NIO.AIO的一个前提,后面会有数篇博客会基于这个小项目利用B ...
- Netty 是如何支撑高性能网络通信的?
作为一个高性能的 NIO 通信框架,Netty 被广泛应用于大数据处理.互联网消息中间件.游戏和金融行业等.大多数应用场景对底层的通信框架都有很高的性能要求,作为综合性能最高的 NIO 框架 之一,N ...
- 成熟的C#网络通信框架介绍——ESFramework通信框架
(转自:http://www.cnblogs.com/zhuweisky/archive/2010/08/12/1798211.html) ESFramework通信框架是一套性能卓越.稳定可靠.强大 ...
- DotNetty网络通信框架学习之初识Netty
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- 【转】ESFramework成熟的C#网络通信框架(跨平台)
原文地址:http://www.cnblogs.com/zhuweisky/archive/2010/08/12/1798211.html ESFramework网络通信框架是一套性能卓越.稳定可靠. ...
- 基于Protobuf的分布式高性能RPC框架——Navi-Pbrpc
基于Protobuf的分布式高性能RPC框架——Navi-Pbrpc 二月 8, 2016 1 简介 Navi-pbrpc框架是一个高性能的远程调用RPC框架,使用netty4技术提供非阻塞.异步.全 ...
随机推荐
- 认证模式之Basic模式
HTTP协议规范中有两种认证方式,一种是Basic认证,另外一种是Digest认证,这两种方式都属于无状态认证方式,所谓无状态即服务端都不会在会话中记录相关信息,客户端每次访问都需要将用户名和密码放置 ...
- iOS树状视图(折叠单元格)详细使用
RATreeView是一个第三方的iOS树视图(通俗的讲就是折叠单元格),它是对UITableView的封装,定义自己的委托和数据源的法,RATreeView是高度可定制的,并且有很多功能.很多朋友都 ...
- 11_Android中HttpClient的应用,读取网络xml及xml解析流,Handler的应用,LayoutInflater的使用,SmartImageView的使用
1 所需的web项目结构如下: 2 new.xml的文件内容如下: <?xml version="1.0" encoding="UTF-8" ?&g ...
- tomcat生产部署关键参数设置
JVM设置 个节点,每个tomcat预计处理500个链接,那么连接池的长连接数最大设为2000. 全节点复制(DeltaManager)模式集群节点数3-6为宜. 主备复制(BackupMnagage ...
- ORM对象关系映射之GreenDAO建立多表关联
利用GreenDAO可以非常方便的建立多张表之间的关联 一对一关联 通常我们在操作数据库的时候,我们往往不是单独的对一张表进行操作,而是对这张表的操作会联动的影响另外一张表或者多张表,比如:现在有两张 ...
- linux下播放组播流出现setsockopt:No such device错误
在linux下播放组播流出现setsockopt:No such device错误是因为多播IP没有add路由表里面 可以采用如下命令完成: root@android:/ # busybox rout ...
- Cocos2d-swift V3.x 中的update方法
在cocos2d V3.x中update方法如果实现,则会被自动调用;不用向早期的版本那样要显式schedule. 但是你还是要显式schedule其他方法或blocks使用node的schedule ...
- Swift之GCD 使用指南2
Grand Central Dispatch大中枢派发:joy: 或俗称 GCD 是一件极其强大的武器.它为你提供了很多底层工具(比如队列和信号量),你可以组合这些工具来实现自己想要的多线程效果.不幸 ...
- Mybatis源码之SimpleExecutor
/** * @author Clinton Begin */ public class SimpleExecutor extends BaseExecutor { public SimpleExecu ...
- 瑞芯微RK3188摄像头相关参数的配置