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, но вы можете выбрать альтернативные серверы.

Другие вопросы по тегам