Error de clojure en el hilo: java.lang.IllegalArgumentException: la clave debe ser un entero

Estoy desconcertado por 2 cosas. Uno, el mensaje de error en sí. Y dos, el hecho de que este código gire tantos hilos. Estaba pensando que giraría 2 o 3 subprocesos en respuesta a una sola solicitud, pero cuando ejecuto esto en localhost y apunto mi navegador (solo una vez), aumenta hasta 40 subprocesos. Es cierto que estaba usando Chrome, que envía 3 solicitudes en segundo plano, por varias razones complicadas que Google defiende como una "característica" (velocidad).

¿Qué significa este error?

Exception in thread "Thread-39" java.lang.IllegalArgumentException: Key must be integer
at clojure.lang.APersistentVector.invoke(APersistentVector.java:250)
at serve_pages_from_memory.core$listen_and_respond$fn__51.invoke(core.clj:30)
at clojure.lang.AFn.run(AFn.java:24)
at java.lang.Thread.run(Thread.java:680)

Veo que se han discutido errores similares en StackOverflow anteriormente, pero no veo cómo se relacionan con mi problema:

mapa de filtro de clojure por llaves

Estoy tratando de construir una aplicación simple que sirve una página. Hago esto principalmente para probar mi propio conocimiento de Clojure. Aquí está la mayor parte del código:

(defn start-thread [f]
(doto (new Thread f) (.start)))

(defn serve-page [wrt]
(let [content-length (count page-string)] 
(. wrt println "HTTP/1.1 200 OK")
(. wrt println "Content-Type: text/html; charset=UTF-8")
(. wrt println "Connection: Keep-Alive")
(. wrt println (str "Content-Length: " content-length))
(. wrt print "\r\n")
(. wrt print page-string)
(. wrt flush)
(. wrt close)))

(defn listen-and-respond [ss]
(let [client (. ss accept)]
(start-thread #([client]
                  (let [wrt (new PrintWriter (new BufferedWriter (new OutputStreamWriter (. client (getOutputStream)))))]        
                    (serve-page wrt))))))

(defn create-server [port]
(let [ss (new ServerSocket port)]
(start-thread #(when-not (. ss (isClosed))
                 (try (listen-and-respond ss)
                      (catch SocketException e))
                 (recur)))
ss)) 

(defn -main [& args]
(println "Server is starting")
(let [port (Integer/parseInt (first args))]
(create-server port)))

El error parece estar quejándose de esta línea:

                (serve-page wrt))))))

Pero ese es un nombre de función y un objeto PrintWriter. El mensaje de error sugeriría que esto era algo sobre un mapa con claves. El error no tiene sentido.

¿Alguna sugerencia?

Respuestas a la pregunta(1)

Su respuesta a la pregunta