# ServerFramework
**Repository Path**: chris118/server-framework
## Basic Information
- **Project Name**: ServerFramework
- **Description**: 实现了一个基于协程的服务器框架,支持多线程、多协程协同调度;支持以异步处理的方式提高服务器性能;封装了网络相关的模块,包括socket、http、servlet等,支持快速搭建HTTP服务器或WebSokcet服务器。
- **Primary Language**: C++
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: https://blog.csdn.net/qq_44778436/article/details/129741309?spm=1001.2014.3001.5501
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 9
- **Created**: 2023-10-17
- **Last Updated**: 2023-10-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 1. 简介
**项目介绍**:实现了一个基于协程的服务器框架,支持多线程、多协程协同调度;支持以异步处理的方式提高服务器性能;封装了网络相关的模块,包括socket、http、servlet等,支持快速搭建HTTP服务器
**详细内容**:日志模块,使用宏实现流式输出,支持同步日志与异步日志、自定义日志格式、日志级别、多日志分离等功能。线程模块,封装pthread相关方法,封装常用的锁包括(信号量,读写锁,自旋锁等)。IO协程调度模块,基于ucontext_t实现非对称协程模型,以线程池的方式实现多线程,多协程协同调度,同时依赖epoll实现了事件监听机制。定时器模块,使用最小堆管理定时器,配合IO协程调度模块可以完成基于协程的定时任务调度。hook模块,将同步的系统调用封装成异步操作(accept, recv, send等),配合IO协程调度能够极大的提升服务器性能。Http模块,封装了sokcet常用方法,支持http协议解析,客户端实现连接池发送请求,服务器端实现servlet模式处理客户端请求,支持单Reator多线程,多Reator多线程模式的服务器。
# 2. 日志模块
* **详细内容**:从零开始实现一个C++高性能服务器框架----日志模块
* **功能**
* 支持不同日志级别
* 可以自由的控制日志输出的位置(目前包括输出到控制台,文件)
* 支持自定义日志格式
* 设置了一系列```工具宏```,实现流式输出
* 目前还是同步日志,后期再添加异步日志
* **主要模块**
* LogEvent、Logger、LogAppender、LogFormatter等
# 3. 线程模块
* **详细内容**:从零开始实现一个C++高性能服务器框架----线程模块
* **功能**
* 封装了一些常用的锁机制(信号量、互斥锁、自旋锁、读写锁),确保线程安全
* 对pthread系列函数封装,生成Thread类
* **主要模块**
* 锁:信号量(SemaphoreLock)、互斥锁(Mutex)、自旋锁(SpinLock)、读写锁(RWMutex)
* 线程:Thread
# 4. 协程模块
* **详细内容**:从零开始实现一个C++高性能服务器框架----协程模块
* **功能**
* 使用非对称协程模型,简化程序逻辑
* 由用户控制协程的执行逻辑,实现了主协程与子协程间的自由切换
* 每个线程有一个主协程t_threadFiber,由主协程创建子协程,通过call()进入子协程运行,back()退出子协程,返回主协程。
* **主要模块**
* Fiber
# 5. 协程调度模块
* **详细内容**:从零开始实现一个C++高性能服务器框架----协程调度模块
* **功能**
* 实现了一个线程池,支持多线程,多协程协同调度
* 能够支持将主线程作为调度线程,提高程序运行效率
* 支持将函数或协程绑定到一个具体的线程上执行
* **主要模块**
* Scheduler
# 6. IO协程调度模块
* **详细内容**:从零开始实现一个C++高性能服务器框架----IO协程调度模块
* **功能**
* 继承自Scheduler,重写了tickle和idle方法,解决了线程阻塞,和idle空转的问题
* 使用epoll系列方法,在协程上实现了IO操作的调度
* 支持添加,删除IO事件,并完成事件响应
* 分离了对与fd的监听与IO操作
* **主要模块**
* IOManager
# 7. 定时器模块
* **详细内容**:从零开始实现一个C++高性能服务器框架----定时器模块
* **功能**
* 使用最小堆管理定时器
* 支持循环定时器,执行循环定时任务
* 支持创建条件定时器,定时器触发与否依赖于绑定的条件
* 配合IO协程调度模块可以完成基于协程的定时任务调度
* **主要模块**
* Timer、TimerManager
# 8. Hook模块
* **详细内容**:从零开始实现一个C++高性能服务器框架----Hook模块
* **功能**
* 对socket常用的IO函数进行了hook,配合IO协程调度模块,可以实现异步操作。
* **主要模块**
* Hook的系列方法、FdCtx、FdManager
# 9. Socket模块
* **详细内容**:从零开始实现一个C++高性能服务器框架----Socket模块
* **功能**
* 对Linux下socket相关方法的封装,包括bind、listen、connect、read/write系列等方法
* 支持快速创建TCP、UDP对应的Socket
* **主要模块**
* Socket
# 10. Stream模块
* **详细内容**:从零开始实现一个C++高性能服务器框架----Stream模块
* **功能**
* 封装了读写操作,支持普通读写以及固定长度读写,方便Http模块使用
* **主要模块**
* Stream、SocketStream
# 11. TcpServer模块
* **详细内容**:从零开始实现一个C++高性能服务器框架----TcpServer模块
* **功能**
* 负责Tcp服务端的相关工作,包括监听,处理客户端响应,设置超时时间等
* 和三个IO协程调度器绑定,能够实现监听,处理客户端读写,处理业务逻辑的分离
* 充当监听池,负责所有监听socket的监听工作
* **主要模块**
TcpServer
# 12. Http模块
* **详细内容**:从零开始实现一个C++高性能服务器框架----Http模块
* **功能**
* 封装了HTTP请求和响应协议(```HttpRequest```和```HttpResponse```)
* 使用nodejs的htpp_parser实现了HTTP请求、响应解析(```HttpRequestParser```和```HttpResponseParser```)
* 实现了uri解析(```Uri```)
* 封装了HTTP会话,负责服务器接收请求和发送响应(```HttpSession```)
* 封装了用于HTTP服务器的相关方法(```HttpServer```)
* 封装了客户端发送请求和接收响应及HTTP连接池(```HttpConnection```和```HttpConnectionPool```)
* **主要模块**
* HttpRequest、HttpResponse、HttpRequestParser、HttpResponseParser、Uri、HttpSession、HttpServer、HttpConnection、HttpConnectionPool
# 13. Servlet模块
* **详细内容**:从零开始实现一个C++高性能服务器框架----Servlet模块
* **功能**
* 提供HTTP请求路径到处理类的映射,用于规范化的HTTP消息处理流程。
* **主要模块**
* Servlet、FunctionServlet、NotFoundServlet、ServletDispatch
# 14. 守护进程
* **详细内容**:从零开始实现一个C++高性能服务器框架----守护进程
* **功能**
* 将进程与终端解绑,转到后台运行
* 实现了双进程唤醒功能,由父进程作为守护进程,当子进程异常结束,父进程在指定时间重新创建子进程
* **主要模块**
* start_deamon、real_start、real_deamon