この非同期/マルチスレッドのライブラリとネイティブクロージャの機能はすべて失われています。リクエストごとにスレッドを割り当てます。
私は外部APIを呼び出し、レスポンスを変換してクライアントに返すWebサービスを持っています。今はPythonで書かれています。私は、それぞれのクライアントが別のスレッドで要求を実行するようにして、お互いが終了するのを待たずに、あるいはサーバーが非同期になるようにしたいと思います。重い計算は必要ありませんが、IOを待つだけです。
私はこれがclojureで簡単だと思っていましたが、何かが欠けています... Alephは非同期サーバーですか?しかし、私がwait
リクエストハンドラをシミュレートすると、クライアントだけでなく、サーバ全体が待機しています。だから私はここでは非同期であるということをよく見ていないのですか?
私の理解では、間違っているかもしれませんが、非同期サーバーがIO操作をブロックすることはありませんか? sleep
はIOを待っていることをシミュレートするための悪い意味ですか?
EDIT私はClojureののアレフサーバーから起動するダム待機サービスを作成し、あなたがしなければならないことを心に留めておく必要がある非同期バックエンドを書くときはまだ、リクエスト処理が
(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}))
)