# monkey **Repository Path**: chen-jihang/monkey ## Basic Information - **Project Name**: monkey - **Description**: 本项目是基于《Linux C++通信架构实战》一书中提供的源码,实现的一个完整的多线程高并发通信服务器项目。该项目作为一个商用级的服务器框架代码,本人希望通过后期的学习,不断完善代码中的逻辑实现,使其成为完完整整具有本人编码风格的服务器框架,并应用在后期的生产实践当中。 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 2 - **Created**: 2022-02-19 - **Last Updated**: 2025-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: 高性能服务器 ## README # monkey #### 介绍 本项目是基于《Linux C++通信架构实战》一书中提供的源码,实现的一个完整的多线程高并发通信服务器项目。该项目作为一个商用级的服务器框架代码,本人希望通过后期的学习,不断完善代码中的逻辑实现,并应用在后期的生产实践当中。比较遗憾的是,为了保证代码功能的完整性,代码逻辑部分本人完全参照书中提供的源码。为了在学习过程中,加深对代码的理解,本人按照自己熟悉的命名规则对源码进行的编写。这样做的好处,是有利于理清函数和变量在代码中的位置,对整个代码逻辑有深刻的印象。最后,我提供了几张该框架的流程图有助于理解和测试截图以证明该框架的有效性。 #### 软件架构 1. 服务器启动流程 ![输入图片说明](%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B.jpg) 2. 服务器收包流程 ![输入图片说明](%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%94%B6%E5%8C%85%E6%B5%81%E7%A8%8B.jpg) 3. 服务器跳跃发包流程 ![输入图片说明](%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%B7%B3%E8%B7%83%E5%8F%91%E5%8C%85%E6%B5%81%E7%A8%8B.jpg) 4. 服务器连接延迟回收流程 ![输入图片说明](%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%9E%E6%8E%A5%E5%9B%9E%E6%94%B6%E6%B5%81%E7%A8%8B.jpg) 5. 服务器心跳包检查流程 ![输入图片说明](%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%BF%83%E8%B7%B3%E5%8C%85%E6%A3%80%E6%9F%A5%E6%B5%81%E7%A8%8B.jpg) 6. 服务器防止洪范攻击流程 ![输入图片说明](%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%98%B2%E6%AD%A2%E6%B4%AA%E8%8C%83%E6%94%BB%E5%87%BB%E6%B5%81%E7%A8%8B.jpg) #### 使用说明 1. 直接在根目录在使用make命令即可生成可执行文件 #### 代码测试 1. 服务器测试截图 ![输入图片说明](%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B5%8B%E8%AF%95%E6%88%AA%E5%9B%BE.png) 2. 测试程序截图 ![输入图片说明](%E6%B5%8B%E8%AF%95%E7%A8%8B%E5%BA%8F%E6%88%AA%E5%9B%BE.png) #### 特点 1. 该服务器借鉴了Nginx的工作模式,即一个主进程,多个工作进程的模式; 2. 以Epoll的水平触发模式编写通信数据的接收和发送; 3. 使用包头+包体的格式进行收发数据包,解决了数据包传送过程中的粘包和拆包情况; 4. 通过线程池技术处理业务逻辑,使用互斥量、信号量保证线程之间的通信; 5. 消息队列机制,将收到的包和待发送的包封装后装入消息队列中,并通知专门的线程处理队列中的消息; 6. 延迟回收机制,避免了连接复用过快,导致错误接收数据包等问题; 7. 定时器和心跳包机制,定时踢出不活跃的连接,保证服务器的性能; 8. 其它次要技术,包括信号处理、配置文件的读取、日志的打印输出、调用fork()创建子进程、创建守护进程;