tgoop.com/pythonl/4932
Last Update:
🚀 Быстрый HTTP‑сервер на базе asyncio.Protocol
В этом гайде показано как создать минималистичный HTTP‑сервер на Python, используя низкоуровневый API asyncio.Protocol
, что делает его быстрее и гибче, чем решения на основе asyncio.Streams
или фреймворков типа FastAPI.
Основные пункты:
1. Сокет-обработчик (`ConnectionHandler`)
- Наследуется от asyncio.Protocol
— реакции на события connection_made
, data_received
, connection_lost
.
- Хранит буфер, транспорт и маппинг маршрутов.
2. Парсинг HTTP-запросов
- В data_received
накапливаются байты.
- Запрос считается полным при обнаружении \r\n\r\n
.
- Затем из заголовков извлекаются method
, path
, другие поля.
3. Маршрутизация через декоратор
- Класс HTTPServer
собирает функции-обработчики для путей.
- Обработчик вызывает либо корутины, либо возвращает статический HTML.
4. Отправка ответа
- Используется asyncio.create_task
внутри колбэка, чтобы запустить send_response
— где формируется ответ с HTTP-кодом, заголовками и телом.
- После write()
соединение закрывается.
5. Простой запуск сервера
- Через loop.create_server()
создаётся экземпляр ConnectionHandler
.
- serve_forever()
запускает обработку соединений.
6. Высокая производительность
Сервер обрабатывает ~100 000 запросов за ~4.2 с при нагрузке 100 одновременных соединений, в то время как FastAPI справляется за ~32 с :contentReference[oaicite:1]{index=1}.
Зачем это полезно:
- Полный контроль над TCP-соединениями и буферами.
- Существенно выше скорость при простых HTTP-API.
- Отличная демонстрация возможностей, которые остаются скрытыми за высокоуровневыми фреймворками.
Поддержка сообщества:
На Reddit статья получила высокую оценку как "отличный материал по Asyncio Protocols"
https://jacobpadilla.com/articles/asyncio-protocols
@pythonl
BY Python/ django

Share with your friend now:
tgoop.com/pythonl/4932