Skip to content

Поведение сервера

Жизненный цикл

ncorn следует протоколу ASGI lifespan для управления жизненным циклом приложения.

Запуск

  1. Загрузка конфигурации из файла, окружения или CLI аргументов
  2. Парсинг и валидация приложения
  3. Создание SSL контекста, если SSL настроен
  4. Запуск ASGI сервера
  5. Вызов события lifespan startup, если определено

Остановка

  1. Получение сигнала остановки (SIGINT, SIGTERM)
  2. Прекращение принятия новых соединений
  3. Ожидание завершения активных запросов (grace период)
  4. Вызов события lifespan shutdown, если определено
  5. Закрытие всех соединений
  6. Завершение процесса

Обработка соединений

Keep-Alive

ncorn поддерживает HTTP keep-alive соединения для повторного использования TCP соединений.

  • Настраивается через --keepalive-timeout
  • Максимум запросов на соединение через --keepalive-requests

Обработка запросов

  1. Принятие входящего TCP соединения
  2. Парсинг заголовков HTTP запроса
  3. Валидация заголовков (размер, количество, формат)
  4. Чтение тела запроса, если есть
  5. Вызов ASGI приложения
  6. Отправка ответа
  7. 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 методом - Путём - Кодом статуса - Задержкой