2012-11-09 36 views
6

我有以下代碼檢測:的Clojure(ALEPH)當服務器斷開

(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:" %))) 

所有它現在的問題是連接到一個本地服務器,然後從通過與服務器標準輸入傳遞數據。這工作正常,除了(on-closed socket #(println "closed"))部分。如果我在客戶端還在繼續時殺死服務器,我應該會收到一條消息,告訴控制檯「關閉」,但我從來沒有這樣做過。

我的最終目標是創建某種恢復代碼,這樣如果服務器關閉,客戶端會在消息等待服務器回來時排隊消息,當服務器返回時,將重新連接併發送排隊的所有內容。

回答

7

它看起來像你阻止線程,會通知你的套接字與你的(doseq ...)循環關閉。將其包裝在(future ...)中,並查看是否無法解決問題。

+1

這樣做,非常感謝你! (另外,到目前爲止我還在愛着aleph,同樣感謝你:P) –