Clojure: Какой сервер по умолчанию для платформы luminus?
На данный момент (2018), какой сервер http / tcp используется при настройке проекта шаблона Luminus с настройками по умолчанию?
Я читаю, что Luminus использует Imutant, однако Imutant - это коллекция других вещей. и я также читал, что основной сервер, используемый в имутанте, откат.
Правильно ли я полагаю, что сервер по умолчанию не работает? Если да, то как работает настройка по умолчанию в отношении неблокирующего ввода-вывода? Предоставляет ли этот сервер неблокирующую архитектуру цикла событий, такую как nginx/nodejs?
2 ответа
Вы правы, что Immutant использует Undertow в качестве своего веб-сервера.
Undertow использует неблокирующие потоки ввода-вывода (обычно по одному на ядро ЦП), а также управляет пулом рабочих потоков. Чтобы процитировать их документацию:
Рабочий XNIO управляет как потоками ввода-вывода, так и пулом потоков, который можно использовать для блокировки задач. Обычно неблокирующие обработчики будут запускаться из потока ввода-вывода, а блокирующие задачи, такие как вызовы сервлета, будут отправляться в пул рабочих потоков.
Потоки ввода-вывода работают в цикле. Этот цикл выполняет три вещи:
- Запустите любые задачи, которые были запланированы для выполнения потоком ввода-вывода
- Запускайте любые запланированные задачи, для которых истекло время ожидания
- Вызовите Selector.select(), а затем вызовите любые обратные вызовы для выбранных ключей.
Очевидная разница между этой архитектурой и архитектурой узлов заключается в разделении пула рабочих потоков, которым разрешено блокировать.
Боюсь, я не могу говорить о сравнении фактической производительности, которая будет зависеть от конкретного случая использования.
В середине 2020 года Liminus перешел на кольцевую поддержку в качестве сервера по умолчанию.
По состоянию на середину 2019 года HTTP-сервером по умолчанию является Jetty черезluminus-jetty
пакет. Это закодировано здесь с другими поддерживаемыми серверами, названными по умолчанию:
(set-feature "+jetty" #{"+aleph" "+http-kit" "+immutant" "+war"})
Источник: Luminus.
Похоже, по умолчанию он использует Imutant, но вы можете выбрать альтернативные серверы.