Clojure(aleph)检测服务器何时断开连接

时间:2012-11-09 22:27:09

标签: networking tcp clojure

我有以下代码:

(ns alephtest.core             
    (:use lamina.core aleph.tcp aleph.formats))

(defn connection-established [socket] 
    (println "Socket connection established")
    (on-closed socket #(println "closed"))
    (doseq [line (line-seq (java.io.BufferedReader. *in*))]
        (enqueue socket line)))

(defn -main [] 
    (on-realized (tcp-client {:host "localhost" :port 9000}) 
        connection-established 
        #(println "error:" %)))

它现在所做的只是连接到本地服务器,然后将数据从stdin传递到服务器。除(on-closed socket #(println "closed"))部分外,这种方法很好。如果我在客户端仍在运行时终止服务器,我应该收到一条消息说“关闭”到控制台,但我从来没有这样做。

我的最终目标是创建某种恢复代码,这样如果服务器出现故障,客户端会在等待服务器返回时将消息排队,当服务器确实返回时它会重新连接并发送排队的所有内容。

1 个答案:

答案 0 :(得分:7)

看起来你正在阻止通过(doseq ...)循环通知你套接字关闭的线程。将其包裹在(future ...)中,看看是否无法修复它。