为什么 Aleph 的 HTTP 服务器不做任何事情?



我使用Clojure的Aleph库编写了一个相对简单的HTTP服务器。这并不复杂:

(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}))

显然它非常简单,并且非常接近Aleph的文档中给出的示例。它编译得很好,但是当我运行它(通过lein run)它只是…什么也不做。程序立即退出;显然,它不会监听端口8005或类似的东西。我遗漏了什么?显然,必须有别的东西,我需要做的是在Aleph启动服务器。

您需要对'start-server'返回的值调用'aleph.netty/wait-for-close'来阻塞,直到服务器关闭。

http/start-server不会阻塞,只是返回一个对象,所以在没有其他事情可做的情况下-main执行结束,程序结束。

我没有使用aleph,也没有看到明显的连接模式。看起来好像必须进行自己的生命周期管理,然后在start-server返回的对象上调用.close以优雅地关闭。

最新更新