简体   繁体   中英

line-seq freezes on java.io.BufferedReader in clojure

I'm trying to process an HTTP stream using clojure.

I am able to write the stream to a file, but I'm trying to process the messages using core.async.

I followed this answer here: Processing a stream of messages from a http server in clojure

However when I call (line-seq ) on the java.io.BufferedReader, it freezes for me.

(defn trades-stream
  []
  (let [session (new-session)
       {:keys [url sessionid]} (:stream  session)
       dump-url (str  url "?sessionid=" sessionid "&symbols=mu" )
       lines (-> dump-url
                 (client/get {:as :stream})
                 :body
                 io/reader)]
       (line-seq lines )))

Any idea how I would remidy this ? Thanks!

Note that line-seq is lazy and won't do anything until forced into a string or something. Perhaps try

(println (first (line-seq lines)))

or

(reduce conj [] (line-seq lines))   ; then print something

You can also use (slurp <input-stream>) to get the contents as a string.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM