An open API service indexing awesome lists of open source software.

https://github.com/zelflod/highload_web_server

Python web server
https://github.com/zelflod/highload_web_server

asynchronous asyncio event-loop non-blocking python single-threaded web-server

Last synced: 4 months ago
JSON representation

Python web server

Awesome Lists containing this project

README

          

## Python web server with non-blocking io

Веб-сервер для отдачи статики с диска

Используется неблокирующий ввод/вывод, кооперативная многозадачность, асинхронное программирование с помощью библиотеки AsyncIO, так как операции в веб-сервере являются IO bound (больше висят попеременно в ожидании ввода/вывода)

Создаются однопоточные процессы `worker` с циклом событий, которые слушают привязанный к `host:ip` сокет и одновременно обрабатывают соединения и запросы.

### Run

```
cd /tmp
git clone https://github.com/zelflod/highload_web_server.git

docker build -t py_web_server https://github.com/zelflod/highload_web_server.git
docker run -it -p 80:80 -v /tmp/highload_web_server/httpd.conf:/etc/httpd.conf:ro -v /tmp/highload_web_server/http-test-suite:/var/www/html:ro --name py_web_server -t py_web_server

# sudo docker start -a py_web_server
```

```
sudo docker build -t py_web_server .
sudo docker run -it -p 80:80 -v /home/nozim/Documents/Univer/VKR/highload_web_server/httpd.conf:/etc/httpd.conf:ro -v /home/nozim/Documents/Univer/VKR/highload_web_server/http-test-suite:/var/www/html:ro --name py_web_server -t py_web_server

# mkfile 2048m test_2048.txt
```

Требования и методика тестирования (корректности работы) по ссылке: https://github.com/init/http-test-suite

### Нагрузочное тестирование и проверка стабильности

```
wrk -t12 -c400 -d30s http://localhost/httptest/wikipedia_russia.html
```
##### py_web_serber with 8 CPU use

![wrk_py_web_server_8_cpu](benchmark/wrk_py_web_server_8_cpu.png "wrk_py_web_server_8_cpu")

##### py_web_serber with 2 CPU use

![wrk_py_web_server_8_cpu](benchmark/wrk_py_web_server_2_cpu.png "wrk_py_web_server_2_cpu")

##### nginx with with default (all) CPU use

![wrk_nginx](benchmark/wrk_nginx.png "wrk_nginx")

```
ab -n 100000 -c 100 127.0.0.1/httptest/wikipedia_russia.html
```

##### py_web_server with 8 CPU use

![ab_py_web_server](benchmark/ab_py_web_server.png "ab_py_web_server")

##### nginx with with default (all) CPU use

![ab_nginx](benchmark/ab_nginx.png "ab_nginx")

### Run nginx (to compare performance)

```
docker run -it -v /tmp/highload_web_server/http-test-suite:/usr/share/nginx/html:ro -p 80:80 nginx
```