Je suis perdu avec toutes ces librairies async/multithreaded et capacités clojure natives.allouer le fil par demande clojure
J'ai un webservice qui appelle une API externe, la transforme et répond au client. En ce moment est écrit en Python. Je voudrais laisser chaque client exécuter sa requête dans un thread séparé afin qu'ils n'attendent pas l'un l'autre pour finir, ou que le serveur soit asynchrone. Il n'y a pas de gros calculs impliqués, seulement en attente d'IO.
Je pensais que ce serait facile avec clojure mais il me manque quelque chose ... Aleph est un serveur asynchrone, non? Cependant, lorsque je simule un gestionnaire de requêtes wait
, le serveur entier attend, pas seulement le client. Donc, je ne vois pas vraiment l'intérêt d'être asynchrone ici? À mon avis, ce qui peut être faux, est-ce qu'un serveur asynchrone ne bloque jamais pour les opérations d'E/S? Peut être sleep
est un mauvais moyen de simuler l'attente d'IO?
EDIT J'ai créé un service d'attente stupide que j'invoque à partir du serveur Aleph de Clojure, et encore, le traitement de la demande est séquentielle
(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}))
)