我正在开发 Clojure / Jetty 网络服务。我有一个特殊的 url,我希望一次只处理一个请求。如果请求了 url,并且在它返回之前,再次请求了 url,我想立即返回。所以在更多 core.clj 中,我定义了我的路线,我有这样的东西:
(def work-in-progress (ref false))
然后过一段时间
(compojure.core/GET "/myapp/internal/do-work" []
(if @work-in-progress
"Work in Progress please try again later"
(do
(dosync
(ref-set work-in-progress true))
(do-the-work)
(dosync
(ref-set rebuild-in-progress false))
"Job completed Successfully")))
我已经在本地 Jetty 服务器上尝试过这个,但我似乎能够两次点击 url 并将工作加倍。在线程化的 Web 服务器环境中,在 Clojure 中实现这一点的好模式/方法是什么?