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 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。

工作流程

  1. 创建监听器对象

  2. 创建组件对象(并绑定监听器)

  3. 启动组件

  4. 连接远程主机(仅用于Agent组件)

  5. 处理通信事件(OnConnect/OnReceive/OnClose ......)

  6. 停止组件(可选,第7步销毁组件对象前会先停止组件)

  7. 销毁组件对象

  8. 销毁监听器对象

示例代码

  • C++

    1. #include "hpsocket/HPSocket.h"
    2.  
    3. /* Listener Class */
    4. class CListenerImpl : public CTcpPullServerListener
    5. {
    6.  
    7. public:
    8. // 5. process network events
    9. virtual EnHandleResult OnPrepareListen(ITcpServer* pSender, SOCKET soListen);
    10. virtual EnHandleResult OnAccept(ITcpServer* pSender, CONNID dwConnID, UINT_PTR soClient);
    11. virtual EnHandleResult OnHandShake(ITcpServer* pSender, CONNID dwConnID);
    12. virtual EnHandleResult OnReceive(ITcpServer* pSender, CONNID dwConnID, int iLength);
    13. virtual EnHandleResult OnSend(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength);
    14. virtual EnHandleResult OnClose(ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode);
    15. virtual EnHandleResult OnShutdown(ITcpServer* pSender);
    16. };
    17.  
    18. int main(int argc, char* const argv[])
    19. {
    20. // 1. Create listener object
    21. CListenerImpl s_listener;
    22. // 2. Create component object (and binding with listener object)
    23. CTcpPullServerPtr s_pserver(&s_listener);
    24.  
    25. // 3. Start component object
    26. if(!s_pserver->Start("0.0.0.0", 5555))
    27. exit(1);
    28.  
    29. /* wait for exit */
    30. // ... ... 
    31.  
    32. // 6. (optional) Stop component object
    33. s_pserver->Stop()
    34.  
    35. return 0;
    36.  
    37. // 7. Destroy component object automatically
    38. // 8. Destroy listener object automatically
    39. }
  • C

    1. #include "hpsocket/HPSocket4C.h"
    2.  
    3. // 5. process network events
    4. EnHandleResult __HP_CALL OnConnect(HP_Agent pSender, HP_CONNID dwConnID);
    5. EnHandleResult __HP_CALL OnReceive(HP_Agent pSender, HP_CONNID dwConnID, int iLength);
    6. EnHandleResult __HP_CALL OnSend(HP_Agent pSender, HP_CONNID dwConnID, const BYTE* pData, int iLength);
    7. EnHandleResult __HP_CALL OnClose(HP_Agent pSender, HP_CONNID dwConnID, En_HP_SocketOperation enOperation, int iErrorCode);
    8. EnHandleResult __HP_CALL OnShutdown(HP_Agent pSender);
    9.  
    10. int main(int argc, char* const argv[])
    11. {
    12. HP_TcpPullAgentListener s_listener;
    13. HP_TcpPullAgent s_agent;
    14.  
    15. // 1. Create listener object
    16. s_listener = ::Create_HP_TcpPullAgentListener();
    17. // 2. Create component object (and binding with listener object)
    18. s_agent    = ::Create_HP_TcpPullAgent(s_listener);
    19.  
    20. /* Set listener callbacks */
    21. ::HP_Set_FN_Agent_OnConnect(s_listener, OnConnect);
    22. ::HP_Set_FN_Agent_OnSend(s_listener, OnSend);
    23. ::HP_Set_FN_Agent_OnPullReceive(s_listener, OnReceive);
    24. ::HP_Set_FN_Agent_OnClose(s_listener, OnClose);
    25. ::HP_Set_FN_Agent_OnShutdown(s_listener, OnShutdown);
    26.  
    27. // 3. Start component object
    28. if(::HP_Agent_HasStarted(s_agent))
    29. exit(1);
    30.  
    31. // 4. Connect to dest host
    32. ::HP_Agent_Connect(s_agent, "remote.host.1", REMOTE_PORT_1, nullptr);
    33. ::HP_Agent_Connect(s_agent, "remote.host.2", REMOTE_PORT_2, nullptr);
    34. ::HP_Agent_Connect(s_agent, "remote.host.3", REMOTE_PORT_3, nullptr);
    35.  
    36. /* wait for exit */
    37. // ... ... 
    38.  
    39. // 6. (optional) Stop component object
    40. ::HP_Agent_Stop(s_agent)
    41.  
    42. // 7. Destroy component object
    43. ::Destroy_HP_TcpPullAgent(s_agent);
    44. // 8. Destroy listener object
    45. ::Destroy_HP_TcpPullAgentListener(s_listener);
    46.  
    47. return 0;
    48. }

组件列表

  • 基础组件

  • SSL组件

  • HTTP组件

高性能网络通信框架 HP-Socket的更多相关文章

  1. 高性能网络通信框架 HP-Socket v5.2.1

    项目主页 : http://www.oschina.net/p/hp-socket 开发文档 : http://www.docin.com/p-2079016612.html 下载地址 : https ...

  2. 【新年呈献】高性能网络通信框架 HP-Socket v5.7.1

    项目主页 : http://www.oschina.net/p/hp-socket 开发文档 : https://www.docin.com/p-2287339564.html 下载地址 : http ...

  3. 手动搭建I/O网络通信框架2:Socket和ServerSocket入门实战,实现单聊

    第一章:手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊 在第一章中运用Socket和ServerSocket简单的实现了网络通信.这一章,利用BIO编程模型进行 ...

  4. 手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊

    资料:慕课网 第二章:手动搭建I/O网络通信框架2:Socket和ServerSocket入门实战,实现单聊 这个基础项目会作为BIO.NIO.AIO的一个前提,后面会有数篇博客会基于这个小项目利用B ...

  5. Netty 是如何支撑高性能网络通信的?

    作为一个高性能的 NIO 通信框架,Netty 被广泛应用于大数据处理.互联网消息中间件.游戏和金融行业等.大多数应用场景对底层的通信框架都有很高的性能要求,作为综合性能最高的 NIO 框架 之一,N ...

  6. 成熟的C#网络通信框架介绍——ESFramework通信框架

    (转自:http://www.cnblogs.com/zhuweisky/archive/2010/08/12/1798211.html) ESFramework通信框架是一套性能卓越.稳定可靠.强大 ...

  7. DotNetty网络通信框架学习之初识Netty

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  8. 【转】ESFramework成熟的C#网络通信框架(跨平台)

    原文地址:http://www.cnblogs.com/zhuweisky/archive/2010/08/12/1798211.html ESFramework网络通信框架是一套性能卓越.稳定可靠. ...

  9. 基于Protobuf的分布式高性能RPC框架——Navi-Pbrpc

    基于Protobuf的分布式高性能RPC框架——Navi-Pbrpc 二月 8, 2016 1 简介 Navi-pbrpc框架是一个高性能的远程调用RPC框架,使用netty4技术提供非阻塞.异步.全 ...

随机推荐

  1. 认证模式之Basic模式

    HTTP协议规范中有两种认证方式,一种是Basic认证,另外一种是Digest认证,这两种方式都属于无状态认证方式,所谓无状态即服务端都不会在会话中记录相关信息,客户端每次访问都需要将用户名和密码放置 ...

  2. iOS树状视图(折叠单元格)详细使用

    RATreeView是一个第三方的iOS树视图(通俗的讲就是折叠单元格),它是对UITableView的封装,定义自己的委托和数据源的法,RATreeView是高度可定制的,并且有很多功能.很多朋友都 ...

  3. 11_Android中HttpClient的应用,读取网络xml及xml解析流,Handler的应用,LayoutInflater的使用,SmartImageView的使用

     1 所需的web项目结构如下: 2 new.xml的文件内容如下: <?xml version="1.0" encoding="UTF-8" ?&g ...

  4. tomcat生产部署关键参数设置

    JVM设置 个节点,每个tomcat预计处理500个链接,那么连接池的长连接数最大设为2000. 全节点复制(DeltaManager)模式集群节点数3-6为宜. 主备复制(BackupMnagage ...

  5. ORM对象关系映射之GreenDAO建立多表关联

    利用GreenDAO可以非常方便的建立多张表之间的关联 一对一关联 通常我们在操作数据库的时候,我们往往不是单独的对一张表进行操作,而是对这张表的操作会联动的影响另外一张表或者多张表,比如:现在有两张 ...

  6. linux下播放组播流出现setsockopt:No such device错误

    在linux下播放组播流出现setsockopt:No such device错误是因为多播IP没有add路由表里面 可以采用如下命令完成: root@android:/ # busybox rout ...

  7. Cocos2d-swift V3.x 中的update方法

    在cocos2d V3.x中update方法如果实现,则会被自动调用;不用向早期的版本那样要显式schedule. 但是你还是要显式schedule其他方法或blocks使用node的schedule ...

  8. Swift之GCD 使用指南2

    Grand Central Dispatch大中枢派发:joy: 或俗称 GCD 是一件极其强大的武器.它为你提供了很多底层工具(比如队列和信号量),你可以组合这些工具来实现自己想要的多线程效果.不幸 ...

  9. Mybatis源码之SimpleExecutor

    /** * @author Clinton Begin */ public class SimpleExecutor extends BaseExecutor { public SimpleExecu ...

  10. 瑞芯微RK3188摄像头相关参数的配置