【发布时间】:2018-03-13 01:13:22
【问题描述】:
我迷失了所有这些异步/多线程库和原生 clojure 功能。
我有一个 Web 服务,它调用外部 API,转换它的响应,然后返回给客户端。现在是用 Python 编写的。我想让每个客户端在一个单独的线程中执行它的请求,这样他们就不会等待对方完成,或者服务器异步。不涉及繁重的计算,只等待IO。
我认为使用 clojure 会很容易,但我遗漏了一些东西...... Aleph 是异步服务器,对吧?但是,当我在请求处理程序内部模拟wait 时,整个服务器都在等待,而不仅仅是客户端。所以我不太明白这里异步的意义?
在我的理解中,这可能是错误的,异步服务器是否永远不会阻塞 IO 操作? sleep 可能是模拟等待 IO 的坏方法?
编辑我创建了一个从 Clojure 的 Aleph 服务器调用的哑等待服务,但请求处理仍然是连续的
(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}))
)
【问题讨论】:
标签: multithreading asynchronous clojure aleph