线程池多反应堆服务器webserver(c++)

线程池多反应堆服务器webserver


前言

参考:爱编程的大丙

一、项目框架

Dispatcher类

Dispatcher类:基类,接口类,同子类(select、poll、epoll)实现多态。

反应堆模型

反应堆模型:提供处理fd的方法。按理说,每个channel的回调函数可以不同,但是此项目只有两类fd:①lfd,监听fd,是tcp/httpServer的主线程使用,用于监听新的连接事件cfd,将cfd交给线程池的子线程处理;②cfd,socket通信fd,主要是线程池中的子线程处理http通信的分析和回应。

对于lfd(只有一个lfd),其只有readcallback,就是将新cfd交给线程池。

对于cfd,其有read、write、destroycallback,3个回调函数,虽然有多个cfd,每个cfd要处理的内容是一致的,即:

readcallback读取客户端http请求,并进行分析和组织回应,断开连接;

writecallback读取writebuffer中的http回应数据进行发送;

destroycallback删除对应的Tcpconnection对象。

所以每个cfd的3个回调函数其实都是一样的,所以在Tcpconnection中,只需要定义3个回调函数就行。

多线程/线程池

多线程/线程池:多线程使用eventloop

tcp服务器

tcp服务器:基础框架。http服务器就是在tcpServer的基础上使用了http通信协议。

buffer

buffer:数据存储

HttpRequest

HttpRequest:分析http请求,组织回应response

HttpResponse

HttpResponse:根据httprequest分析得到的HttpResponse进行http回应数据的组织

TcpConnection

TcpConnection:IO处理

相关推荐
ljt27249606615 分钟前
Vue笔记(五)--组件进阶
前端·vue.js·笔记
sheeta19988 分钟前
LeetCode 每日一题笔记 日期:2026.05.21 题目:3043. 最长公共前缀的长度
笔记·算法·leetcode
衫水12 分钟前
AI Agent 构建实战笔记(20260524)
人工智能·笔记
Keep Running *15 分钟前
Hermes_学习笔记
笔记·学习
EntyIU21 分钟前
Python学习笔记
笔记·python·学习
sheeta199823 分钟前
LeetCode 每日一题笔记 日期:2026.05.23 题目:1752. 检查数组是否经排序和轮转得到
笔记·算法·leetcode
会编程的土豆24 分钟前
Kafka 入门笔记(核心语法 + 用法)
笔记·分布式·kafka
Frostnova丶26 分钟前
【算法笔记】最短路径算法
笔记·算法·图论
東雪木26 分钟前
Java 基础语法与核心数据类型 专属复习笔记
java·开发语言·笔记·java面试
问心无愧051340 分钟前
ctf show web入门 254
java·开发语言·笔记