Skip to content

Instantly share code, notes, and snippets.

@mping
Last active February 23, 2016 10:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mping/98bb8eb9faf3c51f9889 to your computer and use it in GitHub Desktop.
Save mping/98bb8eb9faf3c51f9889 to your computer and use it in GitHub Desktop.
server.clj
(defproject jetty-async "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.7.0"]
[com.ninjudd/ring-async "0.2.0"]])
(ns jetty-async.core
(:require [clojure.core.async :refer [go >! chan close! timeout]]
[ring.adapter.jetty-async :refer [run-jetty-async]])
(:gen-class))
(def counter (atom 0))
(defn now [] (new java.util.Date))
(defn handler [request]
(let [body (chan)
start (now)]
(println "accpt" start)
(go
(<! (timeout 2000))
(>! body (format "id: %d, uri: %s\n%s\n%s" (swap! counter inc) (:uri request) start (now)))
(close! body)
(println "end"))
(println "retrn")
{:body body}))
(defonce server (atom nil))
(defn stop-server []
(when-not (nil? @server)
;; graceful shutdown: wait 100ms for existing requests to be finished
;; :timeout is optional, when no timeout, stop immediately
(.stop server)
(reset! server nil)))
(defn start-server []
(reset! server (run-jetty-async #'handler {:join? false :port 8888})))
(defn -main [& args]
(start-server))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment