2012-11-09 27 views
6

切断したときに検出:の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:" %))) 

すべてそれが今しているローカルサーバーに接続し、サーバに至るまで標準入力からデータを渡すんが。これは、(on-closed socket #(println "closed"))部分を除いて正常に動作します。クライアントがまだ動いている間に私がサーバーを殺すと、コンソールに「閉じた」というメッセージが表示されるはずですが、決して実行しません。

私の最終目標は、何らかの種類のリカバリコードを作成することです。サーバがダウンすると、サーバが復帰するのを待っている間にクライアントがメッセージを待ち行列に入れ、キューに入れられたすべてのものを再接続して送信します。

答えて

7

(doseq ...)ループでソケットを閉じることを通知するスレッドをブロックしているようです。 (future ...)にそれを囲み、それがそれを修正しないかどうか確認してください。

+1

そうでした、ありがとうございました! (また、私は今まで愛するアレフを驚かせています、それにも感謝しています:P) –

関連する問題