[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-71545":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":16,"starSnapshotCount":16,"syncStatus":35,"lastSyncTime":36,"discoverSource":37},71545,"TinyWebServer","qinguoyi\u002FTinyWebServer","qinguoyi",":fire: Linux下C++轻量级WebServer服务器","",null,"C++",19558,4248,99,107,0,11,23,76,33,109.1,"Apache License 2.0",false,"master",true,[27,28,29,30,31],"cpp","http-server","tinywebserver","webbench","webserver","2026-06-12 04:01:01","\n\nTinyWebServer\n===============\nLinux下C++轻量级Web服务器，助力初学者快速实践网络编程，搭建属于自己的服务器.\n\n* 使用 **线程池 + 非阻塞socket + epoll(ET和LT均实现) + 事件处理(Reactor和模拟Proactor均实现)** 的并发模型\n* 使用**状态机**解析HTTP请求报文，支持解析**GET和POST**请求\n* 访问服务器数据库实现web端用户**注册、登录**功能，可以请求服务器**图片和视频文件**\n* 实现**同步\u002F异步日志系统**，记录服务器运行状态\n* 经Webbench压力测试可以实现**上万的并发连接**数据交换\n\n\n写在前面\n----\n* 本项目开发维护过程中，很多童鞋曾发红包支持，我都一一谢绝。我现在不会，将来也不会将本项目包装成任何课程售卖，更不会开通任何支持通道。\n* 目前网络上有人或对本项目，或对游双大佬的项目包装成课程售卖。请各位童鞋擦亮眼，辨识各大学习\u002F求职网站的C++服务器项目，不要盲目付费。\n* 有面试官大佬通过项目信息在公司内找到我，发现很多童鞋简历上都用了这个项目。但，在面试过程中发现`很多童鞋通过本项目入门了，但是对于一些东西还是属于知其然不知其所以然的状态，需要加强下基础知识的学习`，推荐认真阅读下\n    * 《unix环境高级编程》\n    * 《unix网络编程》\n* 感谢各位大佬，各位朋友，各位童鞋的认可和支持。如果本项目能带你入门，将是我莫大的荣幸。\n\n\n目录\n-----\n\n| [概述](#概述) | [框架](#框架) | [Demo演示](#Demo演示) | [压力测试](#压力测试) |[更新日志](#更新日志) |[源码下载](#源码下载) | [快速运行](#快速运行) | [个性化运行](#个性化运行) | [庖丁解牛](#庖丁解牛) | [CPP11实现](#CPP11实现) |[致谢](#致谢) |\n|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:|\n\n\n概述\n----------\n\n> * C\u002FC++\n> * B\u002FS模型\n> * [线程同步机制包装类](https:\u002F\u002Fgithub.com\u002Fqinguoyi\u002FTinyWebServer\u002Ftree\u002Fmaster\u002Flock)\n> * [http连接请求处理类](https:\u002F\u002Fgithub.com\u002Fqinguoyi\u002FTinyWebServer\u002Ftree\u002Fmaster\u002Fhttp)\n> * [半同步\u002F半反应堆线程池](https:\u002F\u002Fgithub.com\u002Fqinguoyi\u002FTinyWebServer\u002Ftree\u002Fmaster\u002Fthreadpool)\n> * [定时器处理非活动连接](https:\u002F\u002Fgithub.com\u002Fqinguoyi\u002FTinyWebServer\u002Ftree\u002Fmaster\u002Ftimer)\n> * [同步\u002F异步日志系统 ](https:\u002F\u002Fgithub.com\u002Fqinguoyi\u002FTinyWebServer\u002Ftree\u002Fmaster\u002Flog)  \n> * [数据库连接池](https:\u002F\u002Fgithub.com\u002Fqinguoyi\u002FTinyWebServer\u002Ftree\u002Fmaster\u002FCGImysql) \n> * [同步线程注册和登录校验](https:\u002F\u002Fgithub.com\u002Fqinguoyi\u002FTinyWebServer\u002Ftree\u002Fmaster\u002FCGImysql) \n> * [简易服务器压力测试](https:\u002F\u002Fgithub.com\u002Fqinguoyi\u002FTinyWebServer\u002Ftree\u002Fmaster\u002Ftest_presure)\n\n\n框架\n-------------\n\u003Cdiv align=center>\u003Cimg src=\"http:\u002F\u002Fww1.sinaimg.cn\u002Flarge\u002F005TJ2c7ly1ge0j1atq5hj30g60lm0w4.jpg\" height=\"765\"\u002F> \u003C\u002Fdiv>\n\nDemo演示\n----------\n> * 注册演示\n\n\u003Cdiv align=center>\u003Cimg src=\"http:\u002F\u002Fww1.sinaimg.cn\u002Flarge\u002F005TJ2c7ly1ge0iz0dkleg30m80bxjyj.gif\" height=\"429\"\u002F> \u003C\u002Fdiv>\n\n> * 登录演示\n\n\u003Cdiv align=center>\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fqinguoyi\u002FTinyWebServer\u002Fblob\u002Fmaster\u002Froot\u002Flogin.gif\" height=\"429\"\u002F> \u003C\u002Fdiv>\n\n> * 请求图片文件演示(6M)\n\n\u003Cdiv align=center>\u003Cimg src=\"http:\u002F\u002Fww1.sinaimg.cn\u002Flarge\u002F005TJ2c7ly1ge0juxrnlfg30go07x4qr.gif\" height=\"429\"\u002F> \u003C\u002Fdiv>\n\n> * 请求视频文件演示(39M)\n\n\u003Cdiv align=center>\u003Cimg src=\"http:\u002F\u002Fww1.sinaimg.cn\u002Flarge\u002F005TJ2c7ly1ge0jtxie8ng30go07xb2b.gif\" height=\"429\"\u002F> \u003C\u002Fdiv>\n\n\n压力测试\n-------------\n在关闭日志后，使用Webbench对服务器进行压力测试，对listenfd和connfd分别采用ET和LT模式，均可实现上万的并发连接，下面列出的是两者组合后的测试结果. \n\n> * Proactor，LT + LT，93251 QPS\n\n\u003Cdiv align=center>\u003Cimg src=\"http:\u002F\u002Fww1.sinaimg.cn\u002Flarge\u002F005TJ2c7ly1gfjqu2hptkj30gz07474n.jpg\" height=\"201\"\u002F> \u003C\u002Fdiv>\n\n> * Proactor，LT + ET，97459 QPS\n\n\u003Cdiv align=center>\u003Cimg src=\"http:\u002F\u002Fww1.sinaimg.cn\u002Flarge\u002F005TJ2c7ly1gfjr1xppdgj30h206zdg6.jpg\" height=\"201\"\u002F> \u003C\u002Fdiv>\n\n> * Proactor，ET + LT，80498 QPS\n\n\u003Cdiv align=center>\u003Cimg src=\"http:\u002F\u002Fww1.sinaimg.cn\u002Flarge\u002F005TJ2c7ly1gfjr24vmjtj30gz0720t3.jpg\" height=\"201\"\u002F> \u003C\u002Fdiv>\n\n> * Proactor，ET + ET，92167 QPS\n\n\u003Cdiv align=center>\u003Cimg src=\"http:\u002F\u002Fww1.sinaimg.cn\u002Flarge\u002F005TJ2c7ly1gfjrflrebdj30gz06z0t3.jpg\" height=\"201\"\u002F> \u003C\u002Fdiv>\n\n> * Reactor，LT + ET，69175 QPS\n\n\u003Cdiv align=center>\u003Cimg src=\"http:\u002F\u002Fww1.sinaimg.cn\u002Flarge\u002F005TJ2c7ly1gfjr1humcbj30h207474n.jpg\" height=\"201\"\u002F> \u003C\u002Fdiv>\n\n> * 并发连接总数：10500\n> * 访问服务器时间：5s\n> * 所有访问均成功\n\n**注意：** 使用本项目的webbench进行压测时，若报错显示webbench命令找不到，将可执行文件webbench删除后，重新编译即可。\n\n更新日志\n-------\n- [x] 解决请求服务器上大文件的Bug\n- [x] 增加请求视频文件的页面\n- [x] 解决数据库同步校验内存泄漏\n- [x] 实现非阻塞模式下的ET和LT触发，并完成压力测试\n- [x] 完善`lock.h`中的封装类，统一使用该同步机制\n- [x] 改进代码结构，更新局部变量懒汉单例模式\n- [x] 优化数据库连接池信号量与代码结构\n- [x] 使用RAII机制优化数据库连接的获取与释放\n- [x] 优化代码结构，封装工具类以减少全局变量\n- [x] 编译一次即可，命令行进行个性化测试更加友好\n- [x] main函数封装重构\n- [x] 新增命令行日志开关，关闭日志后更新压力测试结果\n- [x] 改进编译方式，只配置一次SQL信息即可\n- [x] 新增Reactor模式，并完成压力测试\n\n源码下载\n-------\n目前有两个版本，版本间的代码结构有较大改动，文档和代码运行方法也不一致。重构版本更简洁，原始版本(raw_version)更大保留游双代码的原汁原味，从原始版本更容易入手.\n\n如果遇到github代码下载失败，或访问太慢，可以从以下链接下载，与Github最新提交同步.\n\n* 重构版本下载地址 : [BaiduYun](https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1PozKji8Oop-1BYcfixZR0g)\n    *  提取码 : vsqq\n* 原始版本(raw_version)下载地址 : [BaiduYun](https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1asMNDW-zog92DZY1Oa4kaQ)\n    * 提取码 : 9wye\n    * 原始版本运行请参考[原始文档](https:\u002F\u002Fgithub.com\u002Fqinguoyi\u002FTinyWebServer\u002Ftree\u002Fraw_version)\n\n快速运行\n------------\n* 服务器测试环境\n\t* Ubuntu版本16.04\n\t* MySQL版本5.7.29\n* 浏览器测试环境\n\t* Windows、Linux均可\n\t* Chrome\n\t* FireFox\n\t* 其他浏览器暂无测试\n\n* 测试前确认已安装MySQL数据库\n\n    ```C++\n    \u002F\u002F 建立yourdb库\n    create database yourdb;\n\n    \u002F\u002F 创建user表\n    USE yourdb;\n    CREATE TABLE user(\n        username char(50) NULL,\n        passwd char(50) NULL\n    )ENGINE=InnoDB;\n\n    \u002F\u002F 添加数据\n    INSERT INTO user(username, passwd) VALUES('name', 'passwd');\n    ```\n\n* 修改main.cpp中的数据库初始化信息\n\n    ```C++\n    \u002F\u002F数据库登录名,密码,库名\n    string user = \"root\";\n    string passwd = \"root\";\n    string databasename = \"yourdb\";\n    ```\n\n* build\n\n    ```C++\n    sh .\u002Fbuild.sh\n    ```\n\n* 启动server\n\n    ```C++\n    .\u002Fserver\n    ```\n\n* 浏览器端\n\n    ```C++\n    ip:9006\n    ```\n\n个性化运行\n------\n\n```C++\n.\u002Fserver [-p port] [-l LOGWrite] [-m TRIGMode] [-o OPT_LINGER] [-s sql_num] [-t thread_num] [-c close_log] [-a actor_model]\n```\n\n温馨提示:以上参数不是非必须，不用全部使用，根据个人情况搭配选用即可.\n\n* -p，自定义端口号\n\t* 默认9006\n* -l，选择日志写入方式，默认同步写入\n\t* 0，同步写入\n\t* 1，异步写入\n* -m，listenfd和connfd的模式组合，默认使用LT + LT\n\t* 0，表示使用LT + LT\n\t* 1，表示使用LT + ET\n    * 2，表示使用ET + LT\n    * 3，表示使用ET + ET\n* -o，优雅关闭连接，默认不使用\n\t* 0，不使用\n\t* 1，使用\n* -s，数据库连接数量\n\t* 默认为8\n* -t，线程数量\n\t* 默认为8\n* -c，关闭日志，默认打开\n\t* 0，打开日志\n\t* 1，关闭日志\n* -a，选择反应堆模型，默认Proactor\n\t* 0，Proactor模型\n\t* 1，Reactor模型\n\n测试示例命令与含义\n\n```C++\n.\u002Fserver -p 9007 -l 1 -m 0 -o 1 -s 10 -t 10 -c 1 -a 1\n```\n\n- [x] 端口9007\n- [x] 异步写入日志\n- [x] 使用LT + LT组合\n- [x] 使用优雅关闭连接\n- [x] 数据库连接池内有10条连接\n- [x] 线程池内有10条线程\n- [x] 关闭日志\n- [x] Reactor反应堆模型\n\n庖丁解牛\n------------\n近期版本迭代较快，以下内容多以旧版本(raw_version)代码为蓝本进行详解.\n\n* [小白视角：一文读懂社长的TinyWebServer](https:\u002F\u002Fhuixxi.github.io\u002F2020\u002F06\u002F02\u002F%E5%B0%8F%E7%99%BD%E8%A7%86%E8%A7%92%EF%BC%9A%E4%B8%80%E6%96%87%E8%AF%BB%E6%87%82%E7%A4%BE%E9%95%BF%E7%9A%84TinyWebServer\u002F#more)\n* [最新版Web服务器项目详解 - 01 线程同步机制封装类](https:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MzAxNzU2MzcwMw==&mid=2649274278&idx=3&sn=5840ff698e3f963c7855d702e842ec47&chksm=83ffbefeb48837e86fed9754986bca6db364a6fe2e2923549a378e8e5dec6e3cf732cdb198e2&scene=0&xtrack=1#rd)\n* [最新版Web服务器项目详解 - 02 半同步半反应堆线程池（上）](https:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MzAxNzU2MzcwMw==&mid=2649274278&idx=4&sn=caa323faf0c51d882453c0e0c6a62282&chksm=83ffbefeb48837e841a6dbff292217475d9075e91cbe14042ad6e55b87437dcd01e6d9219e7d&scene=0&xtrack=1#rd)\n* [最新版Web服务器项目详解 - 03 半同步半反应堆线程池（下）](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FPB8vMwi8sB4Jw3WzAKpWOQ)\n* [最新版Web服务器项目详解 - 04 http连接处理（上）](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FBfnNl-3jc_x5WPrWEJGdzQ)\n* [最新版Web服务器项目详解 - 05 http连接处理（中）](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FwAQHU-QZiRt1VACMZZjNlw)\n* [最新版Web服务器项目详解 - 06 http连接处理（下）](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002F451xNaSFHxcxfKlPBV3OCg)\n* [最新版Web服务器项目详解 - 07 定时器处理非活动连接（上）](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FmmXLqh_NywhBXJvI45hchA)\n* [最新版Web服务器项目详解 - 08 定时器处理非活动连接（下）](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002Ffb_OUnlV1SGuOUdrGrzVgg)\n* [最新版Web服务器项目详解 - 09 日志系统（上）](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FIWAlPzVDkR2ZRI5iirEfCg)\n* [最新版Web服务器项目详解 - 10 日志系统（下）](https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002Ff-ujwFyCe1LZa3EB561ehA)\n* [最新版Web服务器项目详解 - 11 数据库连接池](https:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MzAxNzU2MzcwMw==&mid=2649274326&idx=1&sn=5af78e2bf6552c46ae9ab2aa22faf839&chksm=83ffbe8eb4883798c3abb82ddd124c8100a39ef41ab8d04abe42d344067d5e1ac1b0cac9d9a3&token=1450918099&lang=zh_CN#rd)\n* [最新版Web服务器项目详解 - 12 注册登录](https:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MzAxNzU2MzcwMw==&mid=2649274431&idx=4&sn=7595a70f06a79cb7abaebcd939e0cbee&chksm=83ffb167b4883871ce110aeb23e04acf835ef41016517247263a2c3ab6f8e615607858127ea6&token=1686112912&lang=zh_CN#rd)\n* [最新版Web服务器项目详解 - 13 踩坑与面试题](https:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MzAxNzU2MzcwMw==&mid=2649274431&idx=1&sn=2dd28c92f5d9704a57c001a3d2630b69&chksm=83ffb167b48838715810b27b8f8b9a576023ee5c08a8e5d91df5baf396732de51268d1bf2a4e&token=1686112912&lang=zh_CN#rd)\n* 已更新完毕\n\nStar History\n---------\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=qinguoyi\u002FTinyWebServer&type=Date)](https:\u002F\u002Fstar-history.com\u002F#qinguoyi\u002FTinyWebServer&Date)\n\nCPP11实现\n------------\n更简洁，更优雅的CPP11实现：[Webserver](https:\u002F\u002Fgithub.com\u002Fmarkparticle\u002FWebServer)\n\n\n致谢\n------------\nLinux高性能服务器编程，游双著.\n\n感谢以下朋友的PR和帮助: [@RownH](https:\u002F\u002Fgithub.com\u002FRownH)，[@mapleFU](https:\u002F\u002Fgithub.com\u002FmapleFU)，[@ZWiley](https:\u002F\u002Fgithub.com\u002FZWiley)，[@zjuHong](https:\u002F\u002Fgithub.com\u002FzjuHong)，[@mamil](https:\u002F\u002Fgithub.com\u002Fmamil)，[@byfate](https:\u002F\u002Fgithub.com\u002Fbyfate)，[@MaJun827](https:\u002F\u002Fgithub.com\u002FMaJun827)，[@BBLiu-coder](https:\u002F\u002Fgithub.com\u002FBBLiu-coder)，[@smoky96](https:\u002F\u002Fgithub.com\u002Fsmoky96)，[@yfBong](https:\u002F\u002Fgithub.com\u002FyfBong)，[@liuwuyao](https:\u002F\u002Fgithub.com\u002Fliuwuyao)，[@Huixxi](https:\u002F\u002Fgithub.com\u002FHuixxi)，[@markparticle](https:\u002F\u002Fgithub.com\u002Fmarkparticle)，[@blogg9ggg](https:\u002F\u002Fgithub.com\u002FBlogg9ggg).\n","TinyWebServer是一个基于Linux平台的C++轻量级Web服务器，专为初学者快速实践网络编程而设计。它采用了线程池、非阻塞socket以及epoll（支持ET和LT模式）等技术构建并发模型，并通过状态机解析HTTP请求报文，支持GET和POST请求处理。此外，该项目还实现了用户注册登录功能、多媒体文件请求服务及同步\u002F异步日志系统。经过Webbench压力测试，能够支持上万级别的并发连接。非常适合用于学习网络编程基础、了解服务器工作原理或作为小型项目的基础架构使用。",2,"2026-06-11 03:38:26","high_star"]