Clojure WebSocket Client

前端 未结 6 831
死守一世寂寞
死守一世寂寞 2021-02-07 05:40

I have set up a WebSocket server using http-kit that should accept web socket connections. It is the basic example shown in the http-kit documentation.

The quest

6条回答
  •  滥情空心
    2021-02-07 06:21

    For those joining us in 2015: being new to this, I just spent a while trying out all the different options available, and it was pretty difficult to find a library that provides an easy way to set up a simple Clojure WebSocket client. (To be fair, it seems like it's not very common for a WebSocket client to be running in a non-browser/JavaScript context, which is why there seems to be so much emphasis on ClojureScript WebSocket clients.)

    Although it is not well-documented, http.async.client ended up being the path of least resistance for me. I was able to successfully read streaming data from a WebSocket server and print it to the console by doing this:

    (ns example.core
      (:require [http.async.client :as async]))
    
    (def url "ws://localhost:1337")
    
    (defn on-open [ws]
      (println "Connected to WebSocket."))
    
    (defn on-close [ws code reason]
      (println "Connection to WebSocket closed.\n"
               (format "(Code %s, reason: %s)" code reason)))
    
    (defn on-error [ws e]
      (println "ERROR:" e))
    
    (defn handle-message [ws msg]
      (prn "got message:" msg))
    
    (defn -main []
      (println "Connecting...")
      (-> (async/create-client)
          (async/websocket url
                           :open  on-open
                           :close on-close
                           :error on-error
                           :text  handle-message
                           :byte  handle-message))
      ;; Avoid exiting until the process is interrupted.
      (while true))
    

    The infinite loop at the end is just to keep the process from ending. Until I press Ctrl-C, messages received from the socket are printed to STDOUT.

提交回复
热议问题