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
