# TinyWebserver **Repository Path**: beyon-sir/tiny-webserver ## Basic Information - **Project Name**: TinyWebserver - **Description**: 该TinyWebserver是基于IO多路复用技术和线程池实现的Reactor高并发模型 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: https://gitee.com/beyon-sir - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2022-08-30 - **Last Updated**: 2023-03-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TinyWebserver #### 介绍 该TinyWebserver是基于IO多路复用技术和线程池实现的Reactor高并发模型 功能: - 利用IO复用技术Epoll与线程池实现多线程的Reactor高并发模型; - 利用正则及有限状态机解析HTTP请求报文,实现处理静态资源的请求; - 基于标准库容器封装char来实现处理IO客户端通信操作及异步日志系统的缓冲区,并实现随需求自动增长的缓冲区; - 利用RAII机制实现了数据库连接池,减少数据库连接建立与关闭的开销,并实现了用户注册登录功能; - 基于小根堆实现的定时器,关闭超时的非活动客户端连接; #### 软件架构 整个项目目录树如下: ``` ├─build Makefile ├─code 源代码 │ ├─buffer │ ├─http │ ├─log │ ├─pool │ ├─server │ └─timer ├─manuScript 项目搭建过程中的笔记手册 ├─resources 网站资源demo │ ├─css │ ├─fonts │ ├─images │ ├─js │ └─video └─webbench-1.5 服务器压力测试 ``` #### 安装教程 - 环境要求: 1. Linux Ubantu 18.04 2. gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 3. mysql Ver 14.14 Distrib 5.7.39 - 项目配置 1. 需要先配置好对应的数据库 ```mysql // 建立yourdb库 create database MyDataBase; // 创建user表 USE MyDataBase; CREATE TABLE user( username char(50) NULL, password char(50) NULL )ENGINE=InnoDB; // 添加数据 INSERT INTO user(username, password) VALUES('name', 'password'); ``` 2. 编译,即可运行 ```shell make ./bin/server ``` - 压力测试 ```shell // 在10s内10000个客户端并发连接目标服务器的压力测试 ./webbench-1.5/webbench -c 10000 -t 10 http://ip:port/ // 测试环境: Ubuntu:18.04 cpu:i5-11400 CPU: 4 内存:4G (虚拟机环境下) // 结果 webbench - simple web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004,GPL Open Source Software.Benchmarking: GET http://192.168.241.128:1316/ 10000 clients, running 10 sec. Speed=598943 pages/min,31634586 bytes/sec.Requests: 94302 susceed, 0 failed. ```