2016-09-14 16 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

Ringを見ましたか?オンラインで良い紹介があります: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-secondededition –

+0

@AlanThompson:ありがとう!私はリングを見ることを考えていなかったが、ここでうまく仕事をするかもしれないと思う。 – mipadi

答えて

5

http/start-serverはブロックしません。ただオブジェクトを返すので、-mainの実行を終了するだけでプログラムは終了します。

私はalephを使用せず、明白なjoin-likeパターンは見ません。 1つのライフサイクル管理を行う必要があるかのように見え、start-serverから返されたオブジェクトに対して.closeを呼び出し、正常にシャットダウンします。

10

'start-server'によって返された値の 'aleph.netty/wait-for-close'を呼び出すと、サーバーが閉じられるまでブロックされます。

関連する問題