Skip to content

Asynchronous multithreaded Web Server for processing

License

Notifications You must be signed in to change notification settings

svtrostov/xgserver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

XG Server: асинхронный многопоточный web-сервер

Данный web-сервер разработан в качестве платформы для реализации высоконагруженных сетевых сервисов, таких как процессинг. В работе сервера используется асинхронный подход, который заключается в том, что непосредственная обработка запроса отдается на выполнение вспомогательному потоку (worker), а сервер продолжает работать и принимать-отдавать на выполнение все новые соединения. Подготовкой динамического контента для ответа занимаются вспомогательные потоки, а все сетевое взаимодействие с клиентами выполняется сервером в асинхронном режиме (клиент->сервер->worker->сервер->клиент). Статический контент отдается моментально непосредственно самим сервером (клиент->сервер->клиент), также в асинхронном режиме. Сервисы реализуются отдельными SO библиотеками и подключаются/отключаются к web-серверу посредством указания соответствующих настроек в конфигурационном файле, без необходимости внесения каких-либо изменений в его программный код. Сервер поддерживает работу по HTTP и HTTPS протоколам. Реализованы механизмы работы с СУБД MySQL.

К сожалению, автор так и не смог осилить написание полноценного централизованного мануала по данному программнорму продукту, однако, стоит отметить что исходный код содержит исчерпывающее количество комментариев, описывающих механизмы и логику работы компонентов сервера.

Установка и настройка

Для компиляции и работы сервера требуются установленные библиотеки OpenSSL, mysqlclient, libmath, zlib. Также для тестирования работы сервера Вам потребуются установленный локально или удаленно MySQL сервер.

  1. Скопируйте файлы проекта;
  2. Скомпилируйте программу, для этого запустите /compile.sh;
  3. Создайте базу данных с любым названием, и импортируйте в нее данные из файла /xg.sql;
  4. Отредактируйте конфигурационный файл /conf/database.conf, указав в нем название созданной базы данных, а также хост, порт, логин и пароль пользователя для подключения;
  5. При необходимости измените настройки веб-сервера, они расположены в конфигурационном файле /conf/webserver.conf
  6. Запустите сервер.

Сервер не имеет киких-либо опций, указываемых при запуске из командной строки. Все настройки содержатся в соответствующих конфигурационных файлах.

Тестирование работоспособности

Тестирование нагрузки на XG сервер осуществлялось утилитой siege, установленной на удаленном PC, расположенном вместе с сервером в одной локальной сети:

Результаты тестирования:

Transactions: 50000000 hits Availability: 100.00 % Elapsed time: 11684.63 secs (примерно 3 часа 15 минут) Data transferred: 229883.19 MB Response time: 0.01 secs Transaction rate: 4279.13 trans/sec Throughput: 19.67 MB/sec Concurrency: 49.20 Successful transactions: 50000000 hits Failed transactions: 0 hits Longest transaction: 0.15 sec Shortest transaction: 0.00 sec

Сведения о тестировании: Команда: siege -v -l -b -c 50 -r 1000000 http://192.168.6.6:8901/ Количество одновременных запросов к серверу: 50 (пятьдесят) Количество итераций 1000000 (один миллион) Всего было отправлено запросов: 50000000 (пятьдесят миллионов) Успешно обработанных запросов: 50000000 (пятьдесят миллионов) Количество неудачных запросов (ошибки сервера, сбои): 0 (ноль) Общее время, потребовавшееся серверу на обработку всех запросов: 3 часа 15 минут Среднее количество запросов, обрабатываемых в секунду: 4279 Среднее количество одновременно обрабатываемых соединений сервером: 49 Самый "длинный" запрос обрабатывался не более 0.15 секунд (150 миллисекунд) Средний размер ответа сервера: 4821 байт

Под обработкой одного запроса понимается весь цикл: соединение с сервером, отправка запроса, ожидание ответа сервера, получение ответа сервера, закрытие соединения Исходя из данных тестирования можно сделать вывод, что при указанной нагрузке сервер за сутки (24 часа или 86400 секунд) мог бы обработать около 360 миллионов запросов

В данном тестировании запросы направлялись серверу методом GET по HTTP протоколу. При обработке каждого запроса сервер выполнял выборку данных из локальной MySQL базы данных, формировал html документ содержащий результаты выборки и возвращал его в качестве ответа клиенту

Обратная связь

Если Вас заинтересовал данный софт, но Вам нужно его модифицировать или написать аналогичный, автор всегда открыт к сотрудничеству, почта для связи: [email protected]

Если данное программное обеспечение помогло Вам, буду рад вашей благодарности:

Bitcoin кошелек: 1svtY22Rc9GngcUPBH9UEoowb2hhbsuPo

Yandex.деньги: 410014854164402

About

Asynchronous multithreaded Web Server for processing

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages