Почему HTTP-сервер Алефа ничего не делает?

Я написал относительно простой HTTP-сервер, используя библиотеку Clojure Aleph. Это не очень сложно:

(ns cxpond.xmlrpc.core
  (:gen-class)
  (:require [aleph.http :as http]))

(defn handler [req]
  {:status 200
   :headers {"Content-Type" "text/plain"}
   :body "HELLO, WORLD!"})

(defn -main [& args]
  (http/start-server service/handler {:port 8005}))

Очевидно, это довольно просто и очень близко следует примеру, приведенному в документе Алефа. Компилируется нормально, но когда я запускаю его (через lein run) это просто... ничего не делает. Программа просто сразу выходит; очевидно, он не слушает порт 8005 или что-то подобное. Что мне здесь не хватает? Ясно, что для запуска сервера в Алефе мне нужно что-то еще.

2 ответа

Вы захотите вызвать aleph.netty/wait-for-close для значения, возвращаемого start-server, чтобы заблокировать его до закрытия сервера.

http/start-server не блокирует, он просто возвращает объект, так что больше нечего делать, выполнение -main завершается, и программа завершается.

Я не использую aleph и не вижу явного паттерна, похожего на соединение. Похоже, что нужно выполнить собственное управление жизненным циклом, а затем вызвать.close для объекта, возвращаемого из start-server, чтобы корректно завершить работу.

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