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 — это лёгкий веб-сервер на C++ для Linux, созданный, чтобы новички могли изучать и практиковать сетевое программирование, написав собственный сервер с нуля.
Это фреймворк или готовое приложение, которое запускается как есть?Это самостоятельное серверное приложение (не библиотека и не фреймворк), которое вы собираете и запускаете напрямую. Оно использует пул потоков, неблокирующие сокеты и epoll с моделями событий Reactor и имитируемой Proactor.
Как это запустить?Убедитесь, что MySQL установлен, обновите данные инициализации базы в main.cpp, затем запустите скрипт сборки и сам сервер, после чего откройте его в браузере.
Что нужно установить перед сборкой?Нужна среда Linux с установленным MySQL (проверено на Ubuntu 16.04 с MySQL 5.7.29). Браузерная часть работает в Windows или Linux с Chrome или Firefox.
Работает ли входящий в состав инструмент webbench сразу после установки?Если при нагрузочном тестировании команда webbench не находится, нужно удалить существующий исполняемый файл и скомпилировать его заново.
Для кого этот проект?Он рассчитан на новичков, изучающих сетевое программирование на C++, и часто используется для подготовки к собеседованиям. Автор, однако, предупреждает, что некоторые учащиеся берутся за него, не понимая до конца базовых основ.
Можно ли запустить это на любом дистрибутиве Linux или только на Ubuntu?Проверено на Ubuntu 16.04. Но как стандартный серверный проект на C++ для Linux с использованием epoll он должен работать и на других дистрибутивах Linux при наличии необходимой зависимости MySQL.
Что можно настроить при запуске?Флаги командной строки позволяют задать порт (-p), синхронное или асинхронное логирование (-l), комбинацию режимов срабатывания LT/ET для прослушивания и соединений (-m), корректное завершение работы (-o), размер пула подключений к БД (-s), количество потоков (-t), включено ли логирование (-c), а также выбор модели Reactor или Proactor (-a).
Какая скорость работы под нагрузкой?Нагрузочные тесты webbench с отключённым логированием показывают, что сервер обрабатывает более 10 000 одновременных соединений и достигает значений QPS, например 97 459 при Proactor LT+ET и 92 167 при Proactor ET+ET.
Что реально умеет демо?Демо показывает регистрацию и вход пользователей с данными в базе, а также запрос файлов изображений и видео с сервера (в демо используются изображение 6 МБ и видео 39 МБ).
Есть ли две версии кода?Да: переработанная версия с более простым и аккуратным кодом и исходная версия «rawversion», которая ближе к стилю оригинального автора проекта. Их документация и инструкции по запуску различаются.
Creator
qinguoyi
Size
56 MB
Stars
19.7K
Updated
CommitJan 29
Age
7y
Commits · 90 Days