TinywebServer代码详解-日志系统-上(9)
TinywebServer代码详解– 日志系统-上(9)该blog内容转自:最新版Web服务器项目详解 - 09 日志系统(上)
该blog对上述内容进行补充(在本人的角度)
结合此前记录的blog一起学习:牛客WebServer项目实战(点击跳转)
结合此前记录的blog一起学习:多线程与线程同步(点击跳转)
原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、基础知识1.相关概念
日志
由服务器自动创建,并记录运行状态,错误信息,访问数据的文件
同步日志
日志写入函数与工作线程串行执行,由于涉及到I/O操作,当单条日志比较大的时候,同步模式会阻塞整个处理流程,服务器所能处理的并发能力将有所下降,尤其是在峰值的时候,写日志可能成为系统的瓶颈
生产者-消费者模型
并发编程中的经典模型。以多线程为例,为了实现线程间数据同步,生产者线程与消费者线程共享一个缓冲区,其中生产者线程往缓冲区中push消息,消费者线程从缓冲区中pop消息
阻塞队列
将生产者-消费者模型进行封装,使用循环数组实现队列,作为两者共享的缓冲区
异步日志
将所写的日志内容先存入阻塞 ...
TinywebServer代码详解-定时器处理非活动连接-下(8)
TinywebServer代码详解– 定时器处理非活动连接-下(8)该blog内容转自:最新版Web服务器项目详解 - 08 定时器处理非活动连接(下)
该blog对上述内容进行补充(在本人的角度)
结合此前记录的blog一起学习:牛客WebServer项目实战(点击跳转)
原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、基础知识1.本文内容定时器处理非活动连接模块,主要分为两部分,其一为定时方法与信号通知流程,其二为定时器及其容器设计、定时任务的处理
本篇对第二部分进行介绍,具体的涉及到定时器设计、容器设计、定时任务处理函数和使用定时器
定时器设计
将连接资源和定时事件等封装起来,具体包括连接资源、超时时间和回调函数,这里的回调函数指向定时事件
定时器容器设计
将多个定时器串联组织起来统一处理,具体包括升序链表设计
定时任务处理函数
该函数封装在容器类中,具体的,函数遍历升序链表容器,根据超时时间,处理对应的定时器
代码分析-使用定时器
通过代码分析,如何在项目中使用定时器
二、代码分析1.定时器设计项目中将连接资源、定时事件和超时 ...
TinywebServer代码详解-定时器处理非活动连接-上(7)
TinywebServer代码详解– 定时器处理非活动连接-上(7)该blog内容转自:最新版Web服务器项目详解 - 07 定时器处理非活动连接(上)
部分内容参考自:爱编程的大丙(点击跳转)
该blog对上述内容进行补充(在本人的角度)
结合此前记录的blog一起学习:牛客WebServer项目实战(点击跳转)
原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、基础知识1.定时器定时方法本项目中,服务器主循环为每一个http连接创建一个定时器,并对每个连接进行定时。另外,利用升序时间链表容器将所有定时器串联起来,若主循环接收到定时通知,则在链表中依次执行定时任务
Linux下提供的三种定时方法:
socket选项SO_RECVTIMEO和SO_SNDTIMEO
SIGALRM信号
I/O复用系统调用的超时参数
三种方法没有一劳永逸的应用场景,也没有绝对的优劣。由于项目中使用的是SIGALRM信号,这里仅对其进行介绍,另外两种方法可以查阅游双的Linux高性能服务器编程 第11章 定时器
具体的,利用alarm函数周期性地触发SIGALRM信号,信号处 ...
TinywebServer代码详解-http连接处理-下(6)
TinywebServer代码详解–http连接处理-下(6)该blog内容转自:最新版Web服务器项目详解 - 06 http连接处理(下)
该blog对上述内容进行补充(在本人的角度)
结合此前记录的blog一起学习:牛客WebServer项目实战(点击跳转)
原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、基础知识1.stat函数用于检索文件的元数据,如文件大小、权限和修改时间等。并将文件属性存储在结构体stat里
1234567891011121314151617181920212223#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *pathname, struct stat *buf);// struct stat 结构体定义struct stat { mode_t st_mode; // 文件类型和权限 off_t st_size; ...
TinywebServer代码详解-http连接处理-中(5)
TinywebServer代码详解–http连接处理-中(5)该blog内容转自:最新版Web服务器项目详解 - 05 http连接处理(中)
该blog对上述内容进行补充(在本人的角度)
结合此前记录的blog一起学习:牛客WebServer项目实战(点击跳转)
原项目地址(点击跳转)
博主添加注释后项目地址(点击跳转)
一、流程图与状态机1.流程图使用主从状态机模式对请求报文进行解析,从状态机负责读取报文的一行,主状态机负责对该行数据进行解析,主状态机内部调用从状态机,从状态机驱动主状态机
2.主从状态机(1)主状态机主状态机通过,3种状态,标识当前请求报文解析的位置
CHECK_STATE_REQUESTLINE,解析请求行
CHECK_STATE_HEADER,解析请求头
CHECK_STATE_CONTENT,解析消息体,仅用于解析POST请求
(2)从状态机从状态机,从请求报文中一行一行的读取解析,使用3种状态标识解析一行的读取状态
LINE_OK,完整读取一行
LINE_BAD,报文语法有误
LINE_OPEN,读取的行不完整
二、http ...