我尝试解决的方案如下:我有一个测试程序,可以将Web发送到系统上的Web端点。
此测试程序运行了一个jetty Web服务器,它希望从外部系统进行回调,从而完成一个成功的测试周期。如果在特定时间范围(超时)内未收到回叫,则测试失败。
为了达到这个目的,我希望测试运行器等待jetty处理程序在回调时设置的“事件”。
我想过使用java的CyclicBarrier,但我想知道在clojure中是否有一种惯用的解决方法。
由于
答案 0 :(得分:6)
您可以使用最近询问过的promise
:)类似这样的内容:
(def completion (promise))
; In test runner.
; Wait 5 seconds then fail.
(let [result (deref completion 5000 :fail)]
(if (= result :success)
(println "Great!")
(println "Failed :(")))
; In jetty on callback
(deliver completion :success)
答案 1 :(得分:3)
在直接的Clojure中,使用跟踪优秀回调的代理是有意义的,但在实践中我建议使用Aleph,这是一个用于异步Web编程的库甚至可以驱动处理程序相当容易。它生成环形处理程序,听起来很适合您现有的代码。