Ich bin mit all diesen asynchronen/Multithread-libs und native clojure Fähigkeiten verloren.zuweisen Thread pro Anfrage clojure
Ich habe einen Webservice, der eine externe API aufruft, die Antwort transformiert und dem Client zurückgibt. Gerade jetzt ist in Python geschrieben. Ich möchte jeden Client seine Anfrage in einem separaten Thread ausführen lassen, damit sie nicht aufeinander warten müssen, bis der Server beendet ist oder der Server asynchron ist. Es gibt keine schweren Berechnungen, nur auf IO wartend.
Ich dachte, das wäre mit clojure einfach, aber mir fehlt etwas ... Aleph ist async Server, oder? Wenn ich jedoch einen internen Request-Handler wait
simuliere, wartet der gesamte Server, nicht nur der Client. Also sehe ich nicht den Sinn, hier asynchron zu sein?
In meinem Verständnis, was falsch sein kann, ist, dass ein asynchroner Server nie für IO-Operationen blockiert? Kann sleep
ist ein schlechter Mittelwert für die Simulation warten auf IO?
EDIT habe ich einen stummen Warte Service, die ich von Clojure des Aleph-Server aufrufen, und nach wie vor ist die Anforderung Handhabung
(ns aleph-t.core
(:require [aleph.http :as http]
[aleph.netty :as netty]))
(defn heavy [] (Thread/sleep 10000) "hello!")
(defn handler [req]
{:status 200
:headers {"content-type" "text/plain"}
:body (heavy)})
; need to wait otherwise server is closed
(defn -main [& args]
(netty/wait-for-close (http/start-server handler {:port 8080}))
)