HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。

总之HPSocket应用非常简单,性能非常强大。

hpSocket官网:http://www.hpsocket.net

github地址:https://github.com/ldcsaa/HP-Socket

HPSocket主要以下特性:

通用性

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

今天我把我使用的关于HPSocket部分有关记录下来以备忘。目前最新版本5.7.1,我下载的是5.6.1版本。

1.首先下载HP-Socket-master开发包,里面有所有关于HPSocket相关的文档和DEMO,很全。

2.打开vs2010,新建Win32控制台应用程序,名字HpSocketDemo1;

将HP-Socket-master\Windows目录下Common,Src两个文件夹拷贝到工程目录下;

拷贝HP-Socket-master\Windows\Demo\Global文件夹至工程目录下,如下

3.解决方案视图下,增加3个筛选器,"Common","Global","HPSocket",分别添加刚才拷贝过来的文件夹下对应的.h和.cpp文件,其中HPSocket筛选器则按需添加,服务端的话,就添加TcpServer.cpp, TcpServer.h,本篇实现的服务端demo。客户端的话,则添加客户端的cpp文件。当然这三个筛选器的名字可以自己取。

4.工程设置

4.1 工程属性改成“在共享DLL中使用MFC”

4.2 stdafx.h文件中添加一下几行

不添加_USE_MFC或者_ZLIB_DISABLED会报错,如下:

5.至此编译应该都是成功了,下面开始写测试demo

1)新增C++类TCPServerMgr 派生自 CTcpServerListener,转到定义看到CTcpServerListener是虚基类,所以派生子类首先要重写父类所有虚函数。

2)定义public函数用于控制Socket Server的启动,停止,发送数据等(接收数据,通过让客户端传入回调地址,以达到通知客户端有接收数据的功能)

3)注意组件中的OnReceive,OnSend,OnAccept,OnClose都是组件自主触发的,在这些函数中不应有费时的操作,也不应有加锁的公共变量。而应该另外开启线程,处理具体的业务逻辑代码。

最容易想到的办法是用vector保存接收到的数据,而在另一个线程中处理vector中的数据。这样能保证数据量很大的时候都不会阻塞OnReceive的触发。

4)在main函数中编写测试函数


void WINAPI OnTcpServerInterfaceCallBack(LPVOID lpContext, unsigned long lServerHandle, unsigned long lClientHandle, int nCmd, void* pData, int nLen)
{switch (nCmd){case TCPSERVER_CONNECT:{cout << "client:" << lClientHandle << " connected" << endl;}break;case TCPSERVER_DISCONNECT:{cout << "client:" << lClientHandle << " disconnected" << endl;}break;case TCPSERVER_DATA:{string sMsg((char*)pData, nLen);cout << "receive client:" << lClientHandle << ",data:" <<sMsg << endl;}break;}
}
int _tmain(int argc, _TCHAR* argv[])
{TCPServerMgr tcpServ(5555, OnTcpServerInterfaceCallBack);tcpServ.Start();getch();return 0;
}

5)运行正常

至此TCPServerMgr类已经写完,测试代码也写完,稍作修改即可应用到自己的项目中。HPSocket框架自带的心跳,重连进制等都可以查看源码进行修改,以达到符合自己项目的需要。

但是还有后续还有很多工作需要做,比如协议的组包,解包等操作,传输时粘包、断包的处理等。

源码demo我已上传至我的资源,欢迎大家阅读指正。

vs2010下配置HPSocket教程,详细截图附入门demo源码相关推荐

  1. WebRTC应用问题记录(附项目demo源码)

    为什么icecandidate事件不触发? 必须在setLocalDescription和setRemoteDescription之后,该事件才会触发 为什么手机可以和手机通话,电脑可以和电脑通话,但 ...

  2. android自动更新demo,Android程序自动更新功能模块的实现方法【附完整demo源码下载】...

    本文实例讲述了Android程序自动更新功能模块的实现方法.分享给大家供大家参考,具体如下: 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程序启动的时候首先调用更 ...

  3. 【Linux】CentOS7下安装Ngnix代理服务器详细过程 附Linux 64位 Ngnix压缩包百度云盘分享

    [Linux]CentOS7下安装Ngnix代理服务器详细过程 附Linux 64位 Ngnix压缩包百度云盘分享 Ngnix基本概况 Nginx (读作"engine X") 由 ...

  4. VS2010下配置OpenCV2.2

    VS2010下配置OpenCV2.2 1.       下载OpenCV2.2 安装 2.       我的安装路径是D:\Program Files\OpenCV2.2 3.       打开VS2 ...

  5. 老男孩GO语言线下培训班1期整套教程(完整18天含源码)

    老男孩GO语言线下培训班1期整套教程(完整18天含源码) 老男孩教育-Go语言第一期(共18天 含课程源码) 课程详细目录: ├─L001-Go语言-mp4 │      01 Go开发1期 day1 ...

  6. 多智能体系统——竞争网络下异构多智能体系统的分组一致性问题 Group consensus of heterogeneous multi-agent system (附论文链接+源码Matlab)

    多智能体系统--竞争网络下异构多智能体系统的分组一致性问题 (附论文链接+源码Matlab) Yu F, Ji L, Yang S. Group consensus for a class of he ...

  7. 一个纯java写成的贪吃蛇下游戏(《利用一维数组》附完全版源码和素材图片)

    贪吃蛇 先来个效果图吧 工具 eclipse 或者 intellij idea 都可以.图片素材我这边上传的如果有人觉得丑也可以自己搞一搞给蛇换个皮肤. 这个图片开始做的时候也没有素材什么的自己用画图 ...

  8. 微信小程序开发之文件上传下载应用场景(附Demo源码)

    微信小程序开发之文件上传下载应用场景(附Demo源码),Demo为小相册应用,源码在附件中,本示例需要腾讯云支持. http://www.henkuai.com/forum.php?mod=viewt ...

  9. 视频教程-影院在线售票云平台(仿猫眼电影,附SpringBoot项目源码)-Java

    影院在线售票云平台(仿猫眼电影,附SpringBoot项目源码) 19年软件开发经验,设计开发40多个大型软件,10年从事高等教育,主要为java系列课程,带你轻松进入java生涯. 赖国荣 ¥299 ...

  10. 最新小程序授权+php后端(附demo源码)

    参考博客:小程序授权+php后端(附demo源码)_流情的博客-CSDN博客_php小程序 正所谓计划永远赶不上变化,鉴于小程序端已经更改了微信授权登录的接口,因此特来补充一下.原先的wx.getUs ...

最新文章

  1. 说说重试的那些实现方式
  2. the content of the adapter has changed but listview did not
  3. 强烈推荐:SiteServer CMS开源免费的企业级CMS系统!
  4. java多态+多态中隐含的问题
  5. JEP 181不兼容,嵌套类/ 2
  6. 「Flink」使用Managed Keyed State实现计数窗口功能
  7. python包的初始与日志模块
  8. 【转载】VMware vSphere中三种磁盘规格的解释说明
  9. macos mysql8_macOS + MySql8 问题
  10. Linux操作系统下/etc/hosts文件
  11. 装机经验-某些服务器安装系统困难,需要BIOS设置
  12. 程序员打产品经理事件:做不了的事情,直接推给主管
  13. Windows提权实战——————1、IIS6.exe提权实战
  14. ROS 安装教程Ubuntu16.04(2022年最新)
  15. Linux基础知识-命令行
  16. android 抓取解析systrace
  17. 如何用计算机表白男神,女生表白男生的方法 教你如何正确向男神表白
  18. 计算机英语 自我介绍,计算机专业英文自我介绍
  19. Excel文件解析性能对比(POI,easyexcel,xlsx-streamer)
  20. js实现购物车结算界面

热门文章

  1. 2020年中国激光切割运控系统需求现状及竞争格局分析,高功率快速增长「图」
  2. FreeCAD源码分析: PartDesign模块
  3. js获取手机屏幕宽度
  4. maya python vrayies set ies file
  5. ps cc 2014 智能切图
  6. Linux U盘检测与速度测试源码
  7. php做教务系统管理,基于PHP-MYSQL技术的网络教务管理系统设计
  8. 郑州学python哪个机构好_郑太高铁线路图_郑太高铁站点_【高铁网】_郑太高铁时刻表_郑太高铁通车时间...
  9. 产品经理认证(NPDP)知识体系指南.2017
  10. HTML中怎么点击超链接让新页面在另一个窗口打开?