5

我尝试解决的场景如下,我有一个测试程序,可以将网络连接到系统上的网络端点。

这个测试程序有一个在其上运行的 jetty web 服务器,它期望来自外部系统的回调,以完成一个成功的测试周期。如果在特定时间范围(超时)内未收到回调,则测试失败。

为此,我希望测试运行程序等待码头处理程序将在回调时设置的“事件”。

我考虑过使用 java 的 CyclicBarrier,但我想知道 clojure 中是否有一种惯用的方法来解决这个问题。

谢谢

4

2 回答 2

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)
于 2013-02-04T17:12:20.260 回答
3

在直接的 Clojure 中,使用跟踪未完成回调的代理是有意义的,尽管在实践中我建议使用Aleph,这是一个用于异步 Web 编程的库,它甚至可以使驱动处理程序变得相当容易。它生成环处理程序,听起来它很适合您现有的代码。

于 2013-02-04T17:15:05.243 回答