nxweb – быстрый и легкий веб-сервер для приложений, написанных на C и Python
Обоснование
Производительность многих веб-приложений можно значительно повысить за счет небольших и быстрых компонент, написанных на языке C.
Наиболее эффективный способ реализации таких компонент – разработка модулей для основного веб-сервера (nginx, Apache), однако API этих серверов трудно назвать дружественными. В идеале хотелось бы иметь нечто вроде Java-servlet контейнера, только для C.
Перед тем как создать nxweb, я изучил множество легких / встраиваемых веб-серверов (mongoose, microhttpd, libevent, G-WAN), но каждый из них имел свои недостатки (подробнее см. примечания к бенчмаркам здесь).
Что предлагает nxweb:
- высокая (если не лучшая) производительность (см. бенчмарки)
- способность обслуживать тысячи одновременных соединений
- малый объем занимаемой памяти
- гибридная модель: обработка событий + рабочие потоки
- небольшой размер
- простой API
- неплохая поддержка HTTP-протокола
- keep-alive соединения
- chunked encoding как для запросов, так и для ответов
- поддержка SSL (с помощью GNUTLS)
- HTTP прокси (пул соединений с поддержкой keep-alive)
- кеширование ответов в файлах как для бекенда, так и для пользовательских модулей
- при недоступности бекенда сервер может отгружать закешированный контент
- неблокирующий sendfile
- автоматическое gzip-сжатие с кешированием результата
- создание кешируемых картинок-миниатюр с водяными знаками (с помощью ImageMagick)
- базовая поддержка SSI (Server Side Includes)
- сборка HTML из шаблонов (с наследованием)
- подзапросы
- встроенный интерпретатор Python (WSGI-сервер)
- модульная архитектура
- возможность запуска в фоновом режиме
- открытый исходный код
Ограничения
Работает только под Linux.
Документация и API
См. статьи на этом сайте + исходный код. hello.c
– пример пользовательского модуля.
Сборка
- Скачать tar-архив здесь
- Выполнить шаги из файла INSTALL
Ошибки
О замеченных ошибках просьба сообщать на трекер или в группы поддержки.
Обсуждение и объявления
nxweb-ru – группа поддержки на русском языке
nxweb – группа поддержки на английском языке