Поведение сервера¶
Жизненный цикл¶
ncorn следует протоколу ASGI lifespan для управления жизненным циклом приложения.
Запуск¶
- Загрузка конфигурации из файла, окружения или CLI аргументов
- Парсинг и валидация приложения
- Создание SSL контекста, если SSL настроен
- Запуск ASGI сервера
- Вызов события lifespan
startup, если определено
Остановка¶
- Получение сигнала остановки (SIGINT, SIGTERM)
- Прекращение принятия новых соединений
- Ожидание завершения активных запросов (grace период)
- Вызов события lifespan
shutdown, если определено - Закрытие всех соединений
- Завершение процесса
Обработка соединений¶
Keep-Alive¶
ncorn поддерживает HTTP keep-alive соединения для повторного использования TCP соединений.
- Настраивается через
--keepalive-timeout - Максимум запросов на соединение через
--keepalive-requests
Обработка запросов¶
- Принятие входящего TCP соединения
- Парсинг заголовков HTTP запроса
- Валидация заголовков (размер, количество, формат)
- Чтение тела запроса, если есть
- Вызов ASGI приложения
- Отправка ответа
- Keep-alive соединение или закрытие
Таймауты¶
ncorn реализует несколько уровней таймаутов:
- header_timeout — время на получение всех заголовков
- body_timeout — время на чтение тела запроса
- keepalive_timeout — время ожидания следующего запроса на keep-alive
- request_timeout — время на обработку запроса приложением
Режим нескольких воркеров¶
При использовании --workers > 1, ncorn создаёт несколько процессов:
- Каждый воркер работает в своём event loop
- Воркеры используют тот же порт (наследование сокета)
- Воркеры перезапускаются независимо при краше
SSL/TLS¶
ncorn имеет нативную поддержку SSL/TLS:
- TLS 1.3 (по умолчанию), TLS 1.2, TLS 1.1, TLS 1.0
- Пользовательские файлы сертификатов и ключей
- Не требует reverse proxy
Логирование¶
ncorn предоставляет логирование в стиле uvicorn:
21:50:53.290 | INFO | SSL enabled: TLSv1.3
21:50:53.291 | ncorn | Application startup complete
21:50:53.291 | ncorn | Ncorn running on https://127.0.0.1:8443
Каждый запрос логируется с: - HTTP методом - Путём - Кодом статуса - Задержкой