TinyWebServer整体流程

从main主函数开始:

一、定义MySQL数据库的账号、密码和用到的数据库名称。

二、调用Config获得服务器初始化属性

在这一步确定触发模式端口等信息。

三、创建服务器实例对象

设置根目录、开辟存放http连接对象的空间,开辟定时器空间。

四、利用Config里面的属性值初始化server的属性值

五、开启日志

选择同步日志还是异步日志。

六、初始化数据库连接池

这里需要把数据库中已有数据存到map中。

七、初始化线程池

八、设置监听和连接套接字的触发模式

九、初始化epoll实例

这里需要绑定监听文件描述符,还要将监听文件描述符和管道的读端(0),设置信号,忽略客户端断开连接的信号,注册SIGALRM和SIGTERM信号。定时结束触发对应的回调函数,将信号通过管道发送到epoll。

十、开始监听客户端连接

利用epoll_wait不断监听,有以下六种情况:

  1. 如果是新的客户端:接受连接存储信息到user_timer,设置定时器。

  2. 如果对端关闭了连接,就执行回调函数并移除对应的计时器。

  3. 如果是管道传递了信号,从读端读出信号,解析信号并将值返回。

  4. 如果是接收到客户端数据:如果是Reactor,先检查timer是否超时,是则需要调整,然后将读事件提交到线程池,improv是判断是否被其他线程处理;如果已经超时了,就触发删除定时器;如果是Preactor,立刻读取所有数据,将套接字加入到线程池中等候处理,如果有定时器,就调整定时器,读取数据失败,就删除定时器。

  5. 如果是写事件:类似读事件。

  6. 如果是到达超时时间了,那么就查询定时器中已经到达时间的任务并执行。重新设置定时器。

相关推荐
迪丽热爱42 分钟前
每日英语-7
学习
LccKyI1 小时前
C#学习day04
经验分享·笔记·学习·c#
math_hongfan1 小时前
鸿蒙企业级数据存储高级架构:从读写分离到冷热数据分层/归档策略/数据生命周期管理最佳实践
人工智能·学习·华为·架构·harmonyos·鸿蒙
MartinYeung51 小时前
[论文学习]LLM智能体无法保密:多智能体系统中的隐私评估
人工智能·学习
、达西先生1 小时前
GMR IK数学原理解读
笔记·学习·il·遥操作·模仿学习
令狐前生1 小时前
DDD领域模型学习笔记
笔记·学习·架构
LccKyI2 小时前
C#学习day05(开发福彩双色球系统附思维导图)
开发语言·学习·c#
湘美书院--湘美谈教育3 小时前
湘美书院谈探索式教育,中医药AI研究络病理论
大数据·人工智能·深度学习·学习·生活
PC2005-cloud3 小时前
Redis学习笔记:Cluster 集群读写分离实战,Lettuce + Spring Boot 从配置到验证
redis·笔记·学习
math_hongfan3 小时前
鸿蒙存储异常高级排查:文件损坏检测/数据恢复/读写失败重试/磁盘空间预警系统性根治方案
学习·华为·harmonyos·鸿蒙