Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ that can serve resources, directories or a typical ring handler.

[](dependency)
```clojure
[pandeiro/boot-http "0.7.3"] ;; latest release
[pandeiro/boot-http "0.7.4-SNAPSHOT"] ;; latest release
```
[](/dependency)

Expand Down Expand Up @@ -101,12 +101,23 @@ boot -d pandeiro/boot-http serve -d . -p 8888 wait

#### -k / --httpkit

Use the HTTP Kit webserver instead of Jetty.
Use the HTTP Kit webserver instead of Jetty. (DEPRECATED: see server)

```bash
boot -d pandeiro/boot-http serve -d . -k wait # uses httpkit
```

#### -S / --server

Run server using "jetty" (default), "httpkit", or "immutant".

```bash
boot -d pandeiro/boot-http serve -d . # uses jetty
boot -d pandeiro/boot-http serve -d . -S jetty # uses jetty
boot -d pandeiro/boot-http serve -d . -S httpkit # uses httpkit
boot -d pandeiro/boot-http serve -d . -S immutant # uses immutant
```

#### -n / --nrepl

Start an nREPL server for access to the http server. Accepts
Expand Down
50 changes: 29 additions & 21 deletions src/pandeiro/boot_http.clj
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
(def httpkit-dep
'[http-kit "2.1.19"])

(def immutant-dep
'[org.immutant/immutant "2.1.5"])

(def nrepl-dep
'[org.clojure/tools.nrepl "0.2.11"])

Expand All @@ -28,20 +31,25 @@
"Start a web server on localhost, serving resources and optionally a directory.
Listens on port 3000 by default."

[d dir PATH str "The directory to serve; created if doesn't exist."
H handler SYM sym "The ring handler to serve."
i init SYM sym "A function to run prior to starting the server."
c cleanup SYM sym "A function to run after the server stops."
r resource-root ROOT str "The root prefix when serving resources from classpath"
p port PORT int "The port to listen on. (Default: 3000)"
k httpkit bool "Use Http-kit server instead of Jetty"
s silent bool "Silent-mode (don't output anything)"
R reload bool "Reload modified namespaces on each request."
n nrepl REPL edn "nREPL server parameters e.g. \"{:port 3001, :bind \"0.0.0.0\"}\""
N not-found SYM sym "a ring handler for requested resources that aren't in your directory. Useful for pushState."]
[d dir PATH str "The directory to serve; created if doesn't exist."
H handler SYM sym "The ring handler to serve."
i init SYM sym "A function to run prior to starting the server."
c cleanup SYM sym "A function to run after the server stops."
r resource-root ROOT str "The root prefix when serving resources from classpath"
p port PORT int "The port to listen on. (Default: 3000)"
k httpkit bool "Use Http-kit server instead of Jetty. (DEPRECATED: see server)"
s silent bool "Silent-mode (don't output anything)"
R reload bool "Reload modified namespaces on each request."
S server SERVER kw "Run server using \"jetty\" (default), \"httpkit\", or \"immutant\"."
n nrepl REPL edn "nREPL server parameters e.g. \"{:port 3001, :bind \"0.0.0.0\"}\""
N not-found SYM sym "a ring handler for requested resources that aren't in your directory. Useful for pushState."]

(let [port (or port default-port)
server-dep (if httpkit httpkit-dep jetty-dep)
server-type (or server (if httpkit :httpkit :jetty))
server-dep (case server-type
:httpkit httpkit-dep
:immutant immutant-dep
:jetty jetty-dep)
deps (cond-> serve-deps
true (conj server-dep)
(seq nrepl) (conj nrepl-dep))
Expand All @@ -54,33 +62,33 @@
'[boot.util :as boot])
(when '~init
(u/resolve-and-invoke '~init))
(def server
(def http-server
(http/server
{:dir ~dir, :port ~port, :handler '~handler,
:reload '~reload, :env-dirs ~(vec (:directories pod/env)), :httpkit ~httpkit,
:reload '~reload, :env-dirs ~(vec (:directories pod/env)), :server ~server-type,
:not-found '~not-found,
:resource-root ~resource-root}))
(def nrepl-server
(when ~nrepl
(http/nrepl-server {:nrepl ~nrepl})))
(when-not ~silent
(boot/info "Started %s on http://localhost:%d\n"
(:human-name server)
(:local-port server)))))]
(when (and silent (not httpkit))
(:human-name http-server)
(:local-port http-server)))))]
(when (and silent (= server-type :jetty))
(silence-jetty!))
(core/cleanup
(pod/with-eval-in worker
(when nrepl-server
(when-not silent
(util/info "Stopping boot-http nREPL server"))
(.stop nrepl-server))
(when server
(when http-server
(when-not silent
(util/info "Stopping %s\n" (:human-name server)))
((:stop-server server)))
(util/info "Stopping %s\n" (:human-name http-server)))
((:stop-server http-server)))
(when '~cleanup
(u/resolve-and-invoke '~cleanup))))
(core/with-pre-wrap fileset
@start
(assoc fileset :http-port (pod/with-eval-in worker (:local-port server))))))
(assoc fileset :http-port (pod/with-eval-in worker (:local-port http-server))))))
18 changes: 15 additions & 3 deletions src/pandeiro/boot_http/impl.clj
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@
(resources-handler opts)))

;;
;; Jetty / HTTP Kit
;; Jetty / HTTP Kit / Immutant
;;

(defn- start-httpkit [handler opts]
Expand All @@ -111,6 +111,15 @@
{:stop-server stop-server
:human-name "HTTP Kit"})))

(defn- start-immutant [handler opts]
(require 'immutant.web)
(let [server ((resolve 'immutant.web/run) handler (dissoc opts :join?))
stop-server (resolve 'immutant.web/stop)]
{:server server
:human-name "Immutant"
:local-port (:port server)
:stop-server #(stop-server server)}))

(defn- start-jetty [handler opts]
(require 'ring.adapter.jetty)
(let [server ((resolve 'ring.adapter.jetty/run-jetty) handler opts)]
Expand All @@ -119,8 +128,11 @@
:local-port (-> server .getConnectors first .getLocalPort)
:stop-server #(.stop server)}))

(defn server [{:keys [port httpkit] :as opts}]
((if httpkit start-httpkit start-jetty)
(defn server [{:keys [port server] :as opts}]
((case server
:httpkit start-httpkit
:immutant start-immutant
:jetty start-jetty)
(-> (ring-handler opts)
wrap-content-type
wrap-not-modified)
Expand Down