# httpServer **Repository Path**: Apple_Code/http-server ## Basic Information - **Project Name**: httpServer - **Description**: 一个多反应堆tcp服务器模型,实现了c和c++版本,无任何第三方依赖,基于此完成了一个http服务器应用demo,你可以基于此完成任何想要的网络应用 实现了一个线程池,一个基于epoll的事件循环框架以及任务队列等一系列封装 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-08-25 - **Last Updated**: 2024-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 说明 - 一个基于epoll的开发的linux平台下Tcp服务器,参考libevent,实现了一个rector多反应堆服务器模型 - 技术框架:epoll+线程池+eventLoop(事件循环机制) - 提供http协议应用作为参考demo ## 依赖 - 无第三方依赖,纯C++开发,基于debian11环境 - 有c版本和c++版本,此处详细设计仅给出c++版本作为参考,c版本设计原理和架构几乎一致 ## 构建 - 请使用附带的cmakelists.txt进行构建,或者自行构建 ```shell cd http-server/rector_server_cpp/ mkdir build && cd $_ cmake .. make ``` ## 详细设计 ### 概述: - 本项目为完成一个基于事件循环的多反应堆后端服务器模型,之后可在此之上构建任何基于tcp的网络应用,项目中完成了http服务器的demo,仅仅是因为http服务器具有一定的代表性,仅供参考,后续也会将这个项目用到其他项目中用于构建网络应用 ### 模块设计 - Channel:完成了对一个文件描述符(tcp套接字)的封装,并封装了可注册的读回调函数,写回调函数,销毁回调函数 - Buffrr:内部封装了一个字节数组,作缓冲区使用,并记录读写pos、大小等,用于通讯协议解析时更方便tcp流式报文解析 - EpollDispatcher:继承Dispatcher,实现了对linux系统epoll的封装,监听一组文件描述符的读写事件,当监听的这组文件描述符有读写事件发生时,负责调用Channel的读写回调 - EventLoop:事件循环,内部启动后是一个while循环,负责调用EpollDispatcher的阻塞监听函数,是整个系统运行的核心机制实现 - threadPool:线程池负责创建并管理一些线程 - workThread:工作线程,每个工作线程都可以处理eventLoop监听到的事件 - TcpConnection:tcp连接模块,抽象了一个tcp连接,并控制其生命周期 - httpResquest:封装了http请求的整个解析过程 - httpResponse:封装了http请求的整个相应过程 ### 详细类图设计 ![输入图片说明](httpserver.png)