5

我使用 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 中启动服务器必须做其他事情。

4

2 回答 2

11

您需要在“start-server”返回的值上调用“aleph.netty/wait-for-close”来阻止,直到服务器关闭。

于 2016-09-14T18:04:23.980 回答
5

http/start-server 不会阻塞,只是返回一个对象,因此 -main 的执行完成并且程序结束。

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

于 2016-09-14T01:28:54.360 回答