百万级、跨平台TCP&UDP服务器 happy-ip简介

1、简介

        开发c++多年,一直没有一个跨平台、高性能的TCP&UDP服务器,c++在开源工具包上面已落后python、java等开发语言。python开发很简单,绝大部分功能都是第三方包搞定,一个pip命令就完成了;java开发也是,只需要一条mvn指令,就可以调用第三方包。只有c++是最麻烦的,为了做到跨平台,c++支持的功能是尽量的少,不具备通用性、高性能,就不会在c++标准里面出现。从c++98、c++03、c++11用了多长的时间来完成版本迭代。不支持日期时间类型、配置文件读取、日志文件输出、跨平台TCP&UDP服务器...太多太多这样的例子,三天三夜也说不完。我们c++的从业者天天折腾这些功能、人家早上AI、大数据了,我们还在折腾语法、折腾内存泄漏、折腾以上的功能(可喜的是从c++11开始、c++14、c++17陆续推出,在逐渐拉近与其他语言的距离,那天,c++开发能和python一样容易,也有pip这样的三方工具,就实现心目中的大同世界了!)。于是乎,自己动了想开源一套高性能TCP&UDP服务器的念头,于是就有了happy-ip的项目。

        自己之所有能够完成这个项目,是因为我们公司这么多年一直在用这个我们开发的框架。公司现在的tcp连接数量已经达到50万+,通过简单的分布式,代码还是能高性能、安全的运行,这也是直接发表开源项目的底气。happy-ip的是依托于boost的asio。之所以选择asio,是不想再折腾最原始的封装。boost库的asio相较于ace要更友好一些,最主要是boost库是c++第一库,在扩展性和稳定性方面有不可比拟的优势。happy-ip对asio做了以下核心封装:

         (1)更友好的调用(继承抽象接口的读写事件即可);

         (2)会话管理(方便做超时控制、推送消息以及回收资源);

         (3)收发数据与业务逻辑隔离(读取数据后放入线程池处理,不阻塞读事件);

         (4)关闭延迟(特别适合TCP移动通信,TCP会话经常关闭但却不会一直投递关闭事件);

         (5)自动分包(自动处理后续包问题,完整包数据提交给上层应用);

         (6)无缝融入json、protobuf等RPC框架(后面会提交protobuf的rpc代码);

2、模块介绍

2.1 类图

扫描二维码关注公众号,回复: 3546904 查看本文章

2.2 具体类功能

2.2.1 Session类

        基类,完成了TCP与UDP的session统一。主要是提供通用方法:设置MessageFactory类、调用MessageFactory类事件、定时器管理(打开、重置定时器)、回收会话资源等。是最对会话最底层的抽象。

2.2.2 TcpSession类

         继承于Session类,实现了会话的启动、读取数据、写入数据、会话超时机制与资源回收机制。

2.2.3 UdpSession类

         继承于Session类,实现了会话的启动、读取数据、写入数据、会话超时机制。

2.2.4 TcpClient类

         继承于TcpSessionlei类,实现了异步连接、同步连接与自动重连等用户方法。

2.2.5 Server类

        基类,完成了TCP与UDP的Sever统一Sever。实现了消息单条发送、消息全员广播、会话管理。

2.2.6 TcpServer类

        继承于Server类,实现了资源初始化、TCP的accept机制、会话创建。

2.2.7 UdpServer类

        继承于Server类,实现了UDP资源初始化、数据读取、会话创建。

2.2.8 AsyncWriteBuffer类

        基类,收发数据缓冲区,防止多线程发生数据的乱序问题。底层收到数据后,也会放入该缓冲区,便于组包与整体提交数据到应用层。

2.2.9 MessageFactory类

        基类,上层调用需要实现的类。提供了数据准备就绪、数据读、数据写、会话关闭等事件。

2.2.10 IoServicePool类

        基类,是对boost的io_service类的一个封装,保证每个io_servcie都在独立的线程中运行。提供了初始化线程池资源、启动与停止线程池等功能。

2.2.11 UnorderedMapSafe类

        基类,线程安全的UnorderedMap模板类(后面有机会再详细介绍)。

3、资源下载

      git地址为:https://github.com/wangziwen333/happy-ip

      boost库1.63版本头文件与库文件下载路径:https://download.csdn.net/download/wang19840301/10665704

猜你喜欢

转载自blog.csdn.net/wang19840301/article/details/82626594