- 2024-09-05C++入门项目:Linux下C++轻量级Web服务器 跑通|运行|测试(小白进)
TinyWebServer是一个开源的项目,适合小白入门C++网络编程,注意该项目是在linux系统下。Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器.使用线程池+非阻塞socket+epoll(ET和LT均实现)+事件处理(Reactor和Proactor均实现)的并发模型使用状
- 2024-09-05万字解析qinguoyi / TinyWebServer项目的源码
前言项目地址项目详细介绍本文章适合刚学习完C++基础知识并尝试实现一个网络编程项目的同学,其中包含了该项目的代码逐行注释和解析以及许多刚学习网络编程中会遇到的疑问。项目简介:Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器.使用线
- 2023-10-06【TinyWebServer】13踩坑和面试题
踩坑在此项目中遇到的一些比较有意义的问题大文件传输先看下游双书上发送逻辑这块的代码,发送数据只调用了writev函数,并对其返回值是否异常做了处理。boolhttp_conn::write(){ inttemp=0; intbyte_have_send=0; intbyte_to_send=m_write_idx; if(byte_to_
- 2023-10-06【TinyWebServer】12注册登录
整体概述本项目中,使用数据库连接池实现服务器访问数据库的功能,使用POST请求完成注册和登录的校验工作。本文内容本篇将介绍同步实现注册登录功能,具体的涉及到流程图,载入数据库表,提取用户名和密码,注册登录流程与页面跳转的的代码实现。流程图具体的,描述了GET和POST请求下的页
- 2023-09-25【TinyWebServer】11数据库连接池
基础知识什么是数据库连接池?池是一组资源的集合,这组资源在服务器启动之初就被完全创建好并初始化。通俗来说,池是资源的容器,本质上是对资源的复用。顾名思义,连接池中的资源为一组数据库连接,由程序动态地对池中的连接进行使用,释放。当系统开始处理客户请求的时候,如果它需要相关
- 2023-09-24【TinyWebServer】10日志系统(下)
日志系统分为两部分,其一是单例模式与阻塞队列的定义,其二是日志类的定义与使用。本篇将介绍日志类的定义与使用,具体的涉及到基础API,流程图与日志类定义,功能实现。基础API,描述fputs,可变参数宏__VA_ARGS__,fflush流程图与日志类定义,描述日志系统整体运行流程,介绍日志类的具体定义
- 2023-09-19【TinyWebServer】09日志系统(上)
基础概念日志,由服务器自动创建,并记录运行状态,错误信息,访问数据的文件同步日志,日志写入函数与工作线程串行执行,由于涉及到I/O操作,当单条日志比较大的时候,同步模式会阻塞整个处理流程,服务器所能处理的并发能力将有所下降,尤其是在峰值的时候,写日志可能成为系统的瓶颈。生产者-消费
- 2023-09-19【TinyWebServer】08定时器处理非活动连接(下)
定时器处理非活动连接模块,主要分为两部分,其一为定时方法与信号通知流程,其二为定时器及其容器设计、定时任务的处理。本篇对第二部分进行介绍,具体的涉及到定时器设计、容器设计、定时任务处理函数和使用定时器。定时器设计,将连接资源和定时事件等封装起来,具体包括连接资源、超时
- 2023-09-09【TinyWebServer】05http连接处理(中)
上篇对http连接的基础知识、服务器接收请求的处理流程进行了介绍,本篇将结合流程图和代码分别对状态机和服务器解析请求报文进行详解流程图部分:描述主,从状态机调用关系与状态转移过程代码部分:结合代码对http请求报文的解析进行详解流程图与状态机从状态机负责读取报文的一行,主
- 2023-09-08【TinyWebServer】03 半同步半反应堆线程池(下)
基础知识静态成员变量将类成员变量声明为static,则为静态成员变量,与一般的成员变量不同,无论建立多少对象,都只有一个静态成员变量的拷贝,静态成员变量属于一个类,所有对象共享。静态变量在编译阶段就分配了空间,对象还没创建时就已经分配了空间,放到了全局静态区。静态成员变量最
- 2023-09-07【TinyWebServer】02半同步半反应堆线程池
本篇主要围绕服务器项目中涉及的知识进行介绍,详细可参考《Linux下高性能服务器编程》。服务器编程基本框架主要由I/O单元,逻辑单元和网络存储单元组成,其中每个单元之间通过请求队列进行通信,从而协同完成任务。I/O单元:用于处理客户端连接,读写网络数据;逻辑单元:用于处理业务逻辑的