# http_server **Repository Path**: Ape-LHR/http-server ## Basic Information - **Project Name**: http_server - **Description**: HTTP 服务器通过线程池高效处理并发连接,解析浏览器发来的 HTTP 请求并构建 HTTP 响应,通过 CGI 机制接收用户上传的信息并调用外部程序进行处理,提供登录、注册、发布文章、搜索文章及评论文 章功能,通过 Cookie 与 Session 机制实现用户的会话管理,项目采用数据库进行数据持久化存储。 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 14 - **Forks**: 1 - **Created**: 2024-12-09 - **Last Updated**: 2025-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: cgi, Http, threadpool ## README # HttpServer # 介绍 HTTP 服务器通过线程池高效处理并发连接,解析浏览器发来的 HTTP 请求并构建 HTTP 响应,通过 CGI 机制接收用户上传的信息并调用外部程序进行处理,提供登录、注册、发布文章、搜索文章及评论文 章功能,通过 Cookie 与 Session 机制实现用户的会话管理,项目采用数据库进行数据持久化存储。 # 功能模块 ![输入图片说明](webroot/static/images/runTest/moduleimage.png) # 登陆界面 ![输入图片说明](webroot/static/images/runTest/loginimage-20241206095737311.png) # 主界面 ![输入图片说明](webroot/static/images/runTest/runTestimage-20241206095757186.png) # 搜索文章 ![输入图片说明](webroot/static/images/runTest/runTestimage-20241206095810594.png) # 查看文章 ![输入图片说明](webroot/static/images/runTest/runTestimage-20241206095833393.png) # 发布文章 ![输入图片说明](webroot/static/images/runTest/runTestimage-20241206095844961.png) # 服务端运行日志 ![输入图片说明](webroot/static/images/runTest/runTestimage-20241206100110719.png) # 报文解析日志 ![输入图片说明](webroot/static/images/runTest/runTestimage-20241206100137070.png) # 代码行数 ```bash find . -name "*.cc" -or -name "*.hpp" | xargs wc -l 58 ./HttpServer.hpp 69 ./MyDaemon.hpp 109 ./TcpServer_Demo.hpp 131 ./Socket.hpp 732 ./Protocol.hpp 180 ./SingleThreadPool.hpp 489 ./dbManager.hpp 265 ./Util.hpp 125 ./Log.hpp 27 ./main.cc 51 ./lockGuard.hpp 29 ./Task.hpp 61 ./webroot/cgi/register.cc 59 ./webroot/cgi/search.cc 126 ./webroot/cgi/article.cc 93 ./webroot/cgi/login.cc 65 ./webroot/cgi/comment.cc 2669 total ``` # 性能测试 ## 测试环境 ```cpp # lsb_release -a # 查看Ubuntu版本 No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal # uname -a # 查看内核版本 Linux hcss-ecs-79af 5.4.0-170-generic #188-Ubuntu SMP Wed Jan 10 09:51:01 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux # lscpu # 查看CPU架构和核心数 Architecture: x86_64 【64位架构】 CPU(s): 2【总的 CPU 核心数量】 On-line CPU(s) list: 0,1【在线的 CPU 核心列表】 # ulimit file size (blocks, -f) unlimited pending signals (-i) 6751 max memory size (kbytes, -m) unlimited open files (-n) 65535 【最大文件描述符限制】 pipe size (512 bytes, -p) 8 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited virtual memory (kbytes, -v) unlimited ``` ## 资源监控 ``` pidstat -u -p $(pidof server) 1 10000 # cpu pidstat -r -p $(pidof server) 1 10000 # mem pidstat -d -p $(pidof server) 1 10000 # io ``` ## webbench性能测试 ### get请求 主要占用cpu和io资源 #### get请求 500客户端30s【发送4k请求 1失败】 ```cpp webbench -c 500 -t 30 http://120.46.25.211:8585/ Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://120.46.25.211:8585/ 500 clients, running 30 sec. Speed=9160 pages/min, 246052 bytes/sec. Requests: 4579 susceed, 1 failed. ``` #### get请求 1000客户端30s【发送7k请求 0失败】 ```cpp webbench -c 1000 -t 30 http://120.46.25.211:8585/ Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://120.46.25.211:8585/ 1000 clients, running 30 sec. Speed=14938 pages/min, 400993 bytes/sec. Requests: 7469 susceed, 0 failed. ``` #### get请求 4000客户端30s【发送6k请求 0失败】 ```cpp webbench -c 4000 -t 30 http://120.46.25.211:8585/ Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://120.46.25.211:8585/ 4000 clients, running 30 sec. Speed=12248 pages/min, 356808 bytes/sec. Requests: 6124 susceed, 0 failed. ``` #### get请求 5000客户端 【失败】 ```cpp webbench -c 5000 -t 30 http://120.46.25.211:8585/ Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://120.46.25.211:8585/ 5000 clients, running 30 sec. problems forking worker no. 4273 fork failed.: Resource temporarily unavailable ``` ### cgi请求 占用cpu和mem和io资源 #### cgi请求 500客户端30s【发送705 0失败】 ```cpp webbench -c 500 -t 30 http://120.46.25.211:8585/cgi/search Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://120.46.25.211:8585/cgi/search 500 clients, running 30 sec. Speed=1410 pages/min, 79289 bytes/sec. Requests: 705 susceed, 0 failed. ``` #### cgi请求 1000客户端30s【发送883 0失败】 ```cpp webbench -c 1000 -t 30 http://120.46.25.211:8585/cgi/s earch Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://120.46.25.211:8585/cgi/search 1000 clients, running 30 sec. Speed=1766 pages/min, 99308 bytes/sec. Requests: 883 susceed, 0 failed. ``` #### cgi请求 2000客户端30s【发送354 0失败】 ```cpp webbench -c 2000 -t 30 http://120.46.25.211:8585/cgi/search Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://120.46.25.211:8585/cgi/search 2000 clients, running 30 sec. Speed=1308 pages/min, 75915 bytes/sec. Requests: 654 susceed, 0 failed. ``` #### cgi请求 3000客户端30s【发送525 0失败】 ```cpp webbench -c 3000 -t 30 http://120.46.25.211:8585/cgi/s earch Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://120.46.25.211:8585/cgi/search 3000 clients, running 30 sec. Speed=1050 pages/min, 59769 bytes/sec. Requests: 525 susceed, 0 failed. ``` #### cgi请求 4000客户端30s【发送533 0失败】 ```cpp webbench -c 4000 -t 30 http://120.46.25.211:8585/cgi/s earch Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://120.46.25.211:8585/cgi/search 4000 clients, running 30 sec. Speed=1066 pages/min, 60619 bytes/sec. Requests: 533 susceed, 0 failed. ``` #### cgi请求 5000客户端 【失败】 ```cpp webbench -c 5000 -t 30 http://120.46.25.211:8585/cgi/s earch Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://120.46.25.211:8585/cgi/search 5000 clients, running 30 sec. problems forking worker no. 4273 fork failed.: Resource temporarily unavailable ``` #### 总结[30s压力测试] 普通请求 4k-5k客户端 cgi请求 4k客户端