2012-11-09 15 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:" %))) 

सभी अभी एक स्थानीय सर्वर से कनेक्ट करता है और उसके बाद सर्वर के माध्यम से stdin से डेटा गुजरता है। (on-closed socket #(println "closed")) भाग को छोड़कर यह ठीक काम करता है। यदि क्लाइंट अभी भी जा रहा है, तो मैं सर्वर को मारता हूं, मुझे कंसोल पर "बंद" कहने वाला एक संदेश मिलना चाहिए, लेकिन मैं कभी नहीं करता।

मेरा अंतिम लक्ष्य यहां कुछ प्रकार का वसूली कोड बनाना है, ताकि यदि सर्वर नीचे चला जाता है तो क्लाइंट संदेश कतारबद्ध करेगा, जबकि सर्वर वापस आने की प्रतीक्षा करता है, और जब सर्वर वापस आ जाता है ' कतारबद्ध सबकुछ पुनः कनेक्ट और भेज देगा।

उत्तर

7

ऐसा लगता है कि आप थ्रेड को अवरुद्ध कर रहे हैं जो आपको (doseq ...) लूप के साथ बंद सॉकेट के बारे में सूचित करेगा। (future ...) में लपेटें, और देखें कि क्या यह ठीक नहीं है।

+1

ऐसा हुआ, बहुत बहुत धन्यवाद! (इसके अलावा, मैं अब तक प्यार से प्यार कर रहा हूं, इसके लिए भी धन्यवाद: पी) –

संबंधित मुद्दे