по всем вопросам @workakkk
@itchannels_telegram - 🔥 все ит каналы
@ai_machinelearning_big_data -ML
@ArtificialIntelligencedl -AI
@datascienceiot - 📚
@pythonlbooks
РКН: clck.ru/3FmxmM
Post #4932
6.85K

🚀 Быстрый HTTP‑сервер на базе asyncio.Protocol
В этом гайде показано как создать минималистичный HTTP‑сервер на Python, используя низкоуровневый API
Основные пункты:
1. Сокет-обработчик (`ConnectionHandler`)
- Наследуется от
- Хранит буфер, транспорт и маппинг маршрутов.
2. Парсинг HTTP-запросов
- В
- Запрос считается полным при обнаружении
- Затем из заголовков извлекаются
3. Маршрутизация через декоратор
- Класс
- Обработчик вызывает либо корутины, либо возвращает статический HTML.
4. Отправка ответа
- Используется
- После
5. Простой запуск сервера
- Через
-
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
В этом гайде показано как создать минималистичный 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
- ❤ 17
- 👍 5
- 🤩 2





