对于那些在 2015 年加入我们的人:作为新手,我只是花了一些时间尝试了所有可用的不同选项,而且很难找到一个库来提供一种简单的方法来设置一个简单的 Clojure WebSocket 客户端。(公平地说,WebSocket 客户端在非浏览器/JavaScript 上下文中运行似乎并不常见,这就是为什么似乎如此强调 Clojure Script WebSocket 客户端的原因。)
尽管没有很好的文档记录,但 http.async.client最终成为了我阻力最小的路径。通过执行以下操作,我能够成功地从 WebSocket 服务器读取流数据并将其打印到控制台:
(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))
最后的无限循环只是为了防止过程结束。在我按下 Ctrl-C 之前,从套接字接收到的消息都会打印到 STDOUT。