2016-09-14 3 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)의 아주 멋진 프린트 버전은 available : http://clojure-cookbook.com/ –

+0

나는 또한 Clojure로 책 웹 개발에 깊은 인상을 받았다 : https://pragprog.com/book/dswdcloj2/web-development-with-clojure-secondededition –

+0

@AlanThompson : 감사합니다! 나는 반지를 보려고 생각하지는 않았지만 여기서 일을 잘 할 수 있다고 생각한다. – mipadi

답변

5

http/start-server가 차단하지 않고 단지 객체를 반환하므로 -main의 실행을 끝내고 프로그램이 종료됩니다.

저는 알레프를 사용하지 않으며 명백한 결합과 같은 패턴을 보지 못합니다. 마치 자신의 라이프 사이클 관리를 수행 한 다음 start-server에서 반환 된 객체를 .close로 호출하면 정상적으로 종료됩니다.

10

'start-server'가 반환 한 값에서 'aleph.netty/wait-for-close'를 호출하여 서버가 닫힐 때까지 차단할 수 있습니다.

관련 문제