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. 如果是到达超时时间了,那么就查询定时器中已经到达时间的任务并执行。重新设置定时器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/126039.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《视觉 SLAM 十四讲》V2 第 5 讲 相机与图像

文章目录 相机 内参 && 外参5.1.2 畸变模型单目相机的成像过程5.1.3 双目相机模型5.1.4 RGB-D 相机模型 实践5.3.1 OpenCV 基础操作 【Code】OpenCV版本查看 5.3.2 图像去畸变 【Code】5.4.1 双目视觉 视差图 点云 【Code】5.4.2 RGB-D 点云 拼合成 地图【Code】 习题题…

Clion中使用C/C++开发stm32程序

前言 从刚开始学习阶段,一直是用的keil5开发stm32程序,自从看到稚晖君推荐的CLion开发嵌入式程序后,这次尝试在CLion上开发stm32程序。 1、配置CLion用于STM32开发的环境 这里我就不详细写了,没必要重新写,网上教程很多…

Http常见问题

说说 HTTP 常用的状态码及其含义? HTTP 状态码首先应该知道个大概的分类: 1XX:信息性状态码2XX:成功状态码3XX:重定向状态码4XX:客户端错误状态码5XX:服务端错误状态码 301:永久性…

突破封锁|华为芯片10年进化史:从K3V1到麒麟9000S

华为海思麒麟芯片过去10年研发历程回顾如下: 2009年:华为推出第一款手机芯片K3V1,采用65nm工艺制程,基于ARM11架构,主频600MHz,支持WCDMA/GSM双模网络。这款芯片搭载在华为U8800手机上,标志着华…

伟大不能被计划

假期清理书单,把这个书读完了,结果发现出奇的好,可以说是值得亲身去读的书,中间的一些论述提供了人工智能专业方面的视角来论证这这个通识观点,可信度很不错; 这篇blog也不是对书的总结,更多的是…

CSS小计

1:设置图片随窗缩放 使用百分比 width: 100%;height: 100%; 使用vmin: 将可视区域分为100vmin width: 100vmin;height: 100vmin; 2:设置字体颜色与背景色融合 mix-blend-mode: difference 3: 设置宽度自适应 width:fit-content 4:外边距合并 当两个相领的两个容…

Spring Cloud OpenFeign 性能优化的4个方法

OpenFeign 是 Spring 官方推出的一种声明式服务调用和负载均衡组件。它的出现就是为了替代已经进入停更维护状态的 Netflix Feign,是目前微服务间请求的常用通讯组件。 1.超时设置 OpenFeign 底层依赖Ribbon 框架,并且使用了 Ribbon 的请求连接超时时间…

【数据结构】排序

🐇 🔥博客主页: 云曦 📋系列专栏:数据结构 💨吾生也有涯,而知也无涯 💛 感谢大家👍点赞 😋关注📝评论 文章目录 前言一、排序的概念及运用二、常…

Swift SwiftUI CoreData 过滤数据 1

Xcode: Version 14.3.1 (14E300c) iOS: 16 预览&#xff1a; Code: import SwiftUI import CoreDatastruct TodosSearch: View {State private var search_title "测试"FetchRequest var todos_search: FetchedResults<Todo>init() {let request: NSFetchReq…

【linux进程(二)】如何创建子进程?--fork函数深度剖析

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程状态管理 1. 前言2. 查看…

Gmail 将停止支持基本 HTML 视图

根据 Google 支持文档的更新内容&#xff0c;Gmail 将从明年 1 月起停止支持基本 HTML 视图。 ▲ Gmai 基本 HTML 视图界面 目前网页版 Gmail 提供两个界面&#xff1a;基本 HTML 视图和标准视图。停止支持基本 HTML 视图后&#xff0c;当前打开经典模式的基本 HTML 视图模式 …

JavaScript系列从入门到精通系列第十七篇:JavaScript中的全局作用域

文章目录 前言 1&#xff1a;什么叫作用域 一&#xff1a;全局作用域 1&#xff1a;全局变量的声明 2&#xff1a;变量声明和使用的顺序 3&#xff1a;方法声明和使用的顺序 前言 1&#xff1a;什么叫作用域 可以起作用的范围 function fun(){var a 1; } fun();consol…