6

私は次のコードを持っています:

(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"))ます。クライアントがまだ移動しているときにサーバーを強制終了すると、コンソールに「クローズ」というメッセージが表示されるはずですが、決して実行しません。

ここでの私の最終目標は、ある種の回復コードを作成することです。これにより、サーバーがダウンした場合、クライアントはサーバーが戻るのを待つ間メッセージをキューに入れ、サーバーが戻ったときに再接続して送信します。キューに入れられたすべて。

4

1 に答える 1

7

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

于 2012-11-11T02:06:07.877 に答える