Skip to content

Instantly share code, notes, and snippets.

@mhaemmerle
Created September 16, 2012 16:31
Show Gist options
  • Save mhaemmerle/3733098 to your computer and use it in GitHub Desktop.
Save mhaemmerle/3733098 to your computer and use it in GitHub Desktop.
chunked transfer memory leak
(defproject chunked-transfer "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.4.0"]
[aleph "0.3.0-SNAPSHOT"]
[ring "1.1.1"]
[compojure "1.1.1"]
[cheshire "4.0.1"]]
:jvm-opts ["-Djava.awt.headless=true"]
:main chunked-transfer.core)
(ns chunked-transfer.core
(:gen-class)
(:use [lamina core executor]
[aleph http formats]
compojure.core
[cheshire.core :only [generate-string]])
(:require [compojure.route :as route]))
(defn chunk-handler
[response-channel request]
(let [event-channel (map* generate-string (channel))]
(future
(do
(Thread/sleep 1)
(enqueue-and-close event-channel {:response "ok"})))
(enqueue response-channel
{:status 200
:headers {"Content-Type" "application/json"}
:body event-channel})))
(defroutes b-routes
(GET "/" [] (wrap-aleph-handler chunk-handler))
(route/resources "/")
(route/not-found "Page not found"))
(defn start
[port]
(let [wrapped-handler (wrap-ring-handler b-routes)]
(start-http-server wrapped-handler {:port port})))
(defn -main
[& args]
(start 4000))
;; httperf --num-conns=24 --rate=16 --num-calls=10000 --port=4000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment