1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/linxi_8693-WebServer

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
readme.md

Linos

  • Этот код небольшой по объему, что делает его хорошим стартом для изучения исходного кода.

Техники для изучения исходного кода

    1. Сначала изучите файл README.md.
    1. Определите технологии, используемые в проекте.
    1. Понимайте каждый каталог и файл (функции модулей).
    1. Изучайте реализацию каждого модуля, его принципы.
    1. Отладите функции проекта.
    1. Обнаруживайте и исправляйте ошибки в исходном коде, улучшайте открытое ПО.
    1. Постоянно читайте и понимайте, обычно для изучения исходного кода одного открытого проекта требуется от полугода до года.

Технологии, используемые в проекте

    1. Операционные системы, пулы потоков.
    1. Программирование сетей, сокеты, протокол HTTP.
    1. Модули корпоративных проектов, система логирования.
    1. Модель обработки событий Reactor.
    1. Управление проектами с помощью Makefile.
    1. C/C++, изучение C++11.
    1. Базы данных.
    1. Программирование ввода-вывода.

WebServer

Высокопроизводительный веб-сервер, реализованный на C++, который проходит тестирование производительности webbench и способен обрабатывать более 10 000 запросов в секунду.## Функции

  • Использует технику IO-множества Epoll и пулы потоков для реализации модели высокой пропускной способности Reactor.
  • Использует регулярные выражения и машины состояний для анализа HTTP-запросов, что позволяет обрабатывать запросы к статическим ресурсам.
  • Использует стандартные контейнеры библиотеки для упаковки char, что позволяет создавать автоматически растущие буферы.
  • Реализует таймер на основе кучи с минимальным корнем для закрытия неактивных соединений, которые превысили время ожидания.
  • Использует паттерн Singleton и блокирующие очереди для реализации асинхронной системы логирования, которая отслеживает состояние работы сервера.
  • Использует механизм RAII для реализации пула подключений к базе данных, что позволяет уменьшить затраты на создание и закрытие подключений к базе данных, а также реализует функции регистрации и входа пользователей.* Добавлены тестовые модули для logsys, threadpool (todo: timer, sqlconnpool, httprequest, httpresponse).

Требования к среде

  • Linux
  • C++14
  • MySQL

Структура каталогов

.
├── code           Исходный код
│   ├── buffer
│   ├── config
│   ├── http
│   ├── log
│   ├── timer
│   ├── pool
│   ├── server
│   └── main.cpp
├── test           Тестовые модули
│   ├── Makefile
│   └── test.cpp
├── resources      Статические ресурсы
│   ├── index.html
│   ├── image
│   ├── video
│   ├── js
│   └── css
├── bin            Выполнимые файлы
│   └── server
├── log            Файлы логирования
├── webbench-1.5   Тестирование производительности
├── build          
│   └── Makefile
├── Makefile
├── LICENSE
└── readme.md

Запуск проекта

Необходимо сначала настроить соответствующую базу данных

// Создайте базу данных yourdb
create database yourdb;

Создание таблицы пользователей

USE yourdb;
CREATE TABLE user(
    username char(50) NULL,
    password char(50) NULL
)ENGINE=InnoDB;

Добавление данных

INSERT INTO user(username, password) VALUES('name', 'password');
make
./bin/server

Единичные тесты

cd test
make
./test

Тестирование под нагрузкой

image-webbench

./webbench-1.5/webbench -c 100 -t 10 http://ip:port/
./webbench-1.5/webbench -c 1000 -t 10 http://ip:port/
./webbench-1.5/webbench -c 5000 -t 10 http://ip:port/
./webbench-1.5/webbench -c 10000 -t 10 http://ip:port/
  • Тестовая среда: Ubuntu:19.10 процессор:i5-8400 память:8ГБ
  • QPS 10000+

TODO

  • Настройка конфигурации
  • Улучшение единичных тестов
  • Реализация циклического буфера## Благодарности "Высокопроизводительные серверные приложения на Linux", автор: Юань Шуан.

@qinguoyi

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

C++ Linux веб-сервер Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/linxi_8693-WebServer.git
git@api.gitlife.ru:oschina-mirror/linxi_8693-WebServer.git
oschina-mirror
linxi_8693-WebServer
linxi_8693-WebServer
master