TinyWebServer README

The project's README from github.com/qinguoyi/TinyWebServer. As one markdown file: README.md.

TinyWebServer

Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器.

写在前面

目录

概述 框架 Demo演示 压力测试 更新日志 源码下载 快速运行 个性化运行 庖丁解牛 CPP11实现 致谢

概述

框架

Demo演示

  • 注册演示
  • 登录演示
  • 请求图片文件演示(6M)
  • 请求视频文件演示(39M)

压力测试

在关闭日志后,使用Webbench对服务器进行压力测试,对listenfd和connfd分别采用ET和LT模式,均可实现上万的并发连接,下面列出的是两者组合后的测试结果.

  • Proactor,LT + LT,93251 QPS
  • Proactor,LT + ET,97459 QPS
  • Proactor,ET + LT,80498 QPS
  • Proactor,ET + ET,92167 QPS
  • Reactor,LT + ET,69175 QPS
  • 并发连接总数:10500
  • 访问服务器时间:5s
  • 所有访问均成功

注意: 使用本项目的webbench进行压测时,若报错显示webbench命令找不到,将可执行文件webbench删除后,重新编译即可。

更新日志

源码下载

目前有两个版本,版本间的代码结构有较大改动,文档和代码运行方法也不一致。重构版本更简洁,原始版本(raw_version)更大保留游双代码的原汁原味,从原始版本更容易入手.

如果遇到github代码下载失败,或访问太慢,可以从以下链接下载,与Github最新提交同步.

快速运行

个性化运行

./server [-p port] [-l LOGWrite] [-m TRIGMode] [-o OPT_LINGER] [-s sql_num] [-t thread_num] [-c close_log] [-a actor_model]

温馨提示:以上参数不是非必须,不用全部使用,根据个人情况搭配选用即可.

测试示例命令与含义

./server -p 9007 -l 1 -m 0 -o 1 -s 10 -t 10 -c 1 -a 1

庖丁解牛

近期版本迭代较快,以下内容多以旧版本(raw_version)代码为蓝本进行详解.

Star History

Star History Chart

CPP11实现

更简洁,更优雅的CPP11实现:Webserver

致谢

Linux高性能服务器编程,游双著.

感谢以下朋友的PR和帮助: @RownH,@mapleFU,@ZWiley,@zjuHong,@mamil,@byfate,@MaJun827,@BBLiu-coder,@smoky96,@yfBong,@liuwuyao,@Huixxi,@markparticle,@blogg9ggg.

TinyWebServer (qinguoyi/TinyWebServer)

Searching Database…

这是什么?TinyWebServer 是一个面向 Linux 的轻量级 C++ Web 服务器,旨在帮助初学者通过从零搭建自己的服务器来学习和练习网络编程。
这是框架,还是可以直接运行的成品应用?它是一个独立的服务器应用(而非库或框架),你可以直接构建并运行。它使用线程池、非阻塞套接字,以及基于 epoll 的 Reactor 和模拟 Proactor 两种事件模型。
我要怎么让它运行起来?确保已安装 MySQL,在 main.cpp 中更新数据库初始化信息,然后运行构建脚本并启动服务器,之后即可通过浏览器访问。
构建前需要先安装什么?你需要一个安装了 MySQL 的 Linux 环境(已在 Ubuntu 16.04 和 MySQL 5.7.29 上测试);浏览器端可在 Windows 或 Linux 上配合 Chrome 或 Firefox 使用。
内置的 webbench 工具开箱即用吗?压力测试时如果提示找不到 webbench 命令,需要删除现有的可执行文件并重新编译。
这个项目适合哪些人?它面向学习 C++ 网络编程的初学者,常用于面试备考。不过作者提醒,有些学习者在没有完全理解底层基础的情况下就开始上手。
这个程序能在所有 Linux 发行版上运行,还是只能在 Ubuntu 上运行?它在 Ubuntu 16.04 上测试通过。作为一个使用 epoll 的标准 Linux C++ 服务器,只要满足所需的 MySQL 依赖,它理论上也应能在其他 Linux 发行版上运行。
启动时可以配置哪些选项?命令行参数可以设置以下内容:端口(-p)、同步/异步日志(-l)、监听与连接的触发模式组合 LT/ET(-m)、优雅关闭(-o)、数据库连接池大小(-s)、线程数(-t)、是否开启日志(-c),以及 Reactor 与 Proactor 模型的选择(-a)。
负载下性能如何?在关闭日志的情况下,webbench 压力测试显示它可处理超过 10,000 个并发连接,其中 Proactor LT+ET 模式的 QPS 达到 97,459,Proactor ET+ET 模式达到 92,167。
演示程序实际能做什么?演示展示了基于数据库的用户注册与登录,以及从服务器请求图片文件和视频文件(演示中包括一张 6MB 的图片和一个 39MB 的视频)。
代码有两个版本吗?有。一个是重构版本,代码更简洁清晰;另一个是原始的“rawversion”,更贴近项目原作者的编码风格。两者的文档和运行说明有所不同。
Creator
qinguoyi
Size
56 MB
Stars
19.7K
Updated
CommitJan 29
Age
7y
Commits · 90 Days