2016-09-14 69 views
5

我已经使用Clojure的Aleph库编写了一个相对简单的HTTP服务器。这不是很复杂: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中启动服务器必须有其他事情需要我去做。

+1

你看过戒指吗?网上有一个很好的介绍:https://github.com/clojure-cookbook/clojure-cookbook/blob/master/07_webapps/7-00_introduction.asciidoc本书的一个非常好的印刷版本(O'Reilly)也是可用:http://clojure-cookbook.com/ –

+0

我对Clojure的Web开发也很印象:https://pragprog.com/book/dswdcloj2/web-development-with-clojure-second-edition –

+0

@AlanThompson:谢谢!我没有想过看戒指,但我认为它可以在这里很好地完成这项工作。 – mipadi

回答

5

http/start-server不会阻塞,只是返回一个对象,所以没有别的要执行的--main结束并且程序结束。

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

10

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

相关问题