이 비동기/다중 스레드 라이브러리 및 원시 클로저 기능이 모두 손실됩니다.요청마다 스레드를 할당하십시오.
외부 API를 호출하고 응답을 변환 한 다음 클라이언트에게 돌려주는 webservice가 있습니다. 지금은 파이썬으로 작성되었습니다. 각 클라이언트가 별도의 스레드에서 요청을 실행하여 서로 마칠 때까지 또는 서버가 비동기가 될 때까지 기다리지 않도록하고 싶습니다. 과도한 계산이 필요하지 않으며 IO 만 기다립니다.
나는 clojure로 쉽게 될 것이라고 생각했지만 뭔가를 놓치고 있습니다 ... Aleph는 비동기 서버입니다, 맞습니까? 그러나 요청 처리기 내부에서 wait
을 시뮬레이트하면 클라이언트뿐만 아니라 전체 서버가 대기합니다. 그래서 여기에 비동기 적 관점이 보이지 않습니까?
내가 잘못 이해 한 것은 비동기 서버가 IO 작업을 차단하지 않는다는 것입니다. sleep
은 입출력을 기다리는 시뮬레이션에 나쁜 의미가 있습니까?
편집은 내가 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}))
)