我一直在使用HTTP的工具包,应该接受网络套接字连接建立一个WebSocket的服务器。 它是HTTP的试剂盒文档中示出的基本示例。
现在的问题是:你如何创建连接到它Clojure的客户端?
客户端可以是任何Clojure的HTTP库,我不介意。 我已经知道了JavaScript客户端,我相信Java有,我可以从Clojure中使用的API。 但是,我期待的是, 同时支持客户端和服务器的WebSockets一个Clojure的库。 我看到HTTP-kit的代码没有什么会让它容易些。
我一直在使用HTTP的工具包,应该接受网络套接字连接建立一个WebSocket的服务器。 它是HTTP的试剂盒文档中示出的基本示例。
现在的问题是:你如何创建连接到它Clojure的客户端?
客户端可以是任何Clojure的HTTP库,我不介意。 我已经知道了JavaScript客户端,我相信Java有,我可以从Clojure中使用的API。 但是,我期待的是, 同时支持客户端和服务器的WebSockets一个Clojure的库。 我看到HTTP-kit的代码没有什么会让它容易些。
艾礼富对服务器和客户端上的WebSockets支持。 这可能需要一些时间来适应异步风格和ALEPH的核心抽象,但它是一个很好的工具,一旦你得到了它的窍门。
HTTP-KIT的客户端不支持WebSocket的,但(我想不出一个好的API的吧)。 阿列夫是这种情况下,使用一个很好的选择。 另一种选择是http.async.client ,我用它在HTTP-KIT的服务器的WebSocket的单元测试: 在这里
根据该公告 ,HTTP-KIT拥有网络套接字支持。 如果你不绑定到异步设施HTTP-KIT客户报价,你也可以使用CLJ-HTTP 。 他们有一个非常类似的界面,看来(我有使用,但CLJ-HTTP还)。
(ns playground.experiments.ws
(:use aleph.http lamina.core))
(defn ws-client [] (websocket-client {:url "ws://echo.websocket.org:80"}))
(defn echo [message]
(let [channel (wait-for-result (ws-client) 500)]
(enqueue channel message)
(let [echo (wait-for-result (read-channel channel) 500)]
(close channel)
echo)))
(echo "Echo me!")
Gniazdo是Clojure的一个WebSocket的客户端。 它包装码头的执行协议。
对于那些在2015年加入我们的行列:是新来这个,我只花了一会尝试所有可用不同的选择,这是相当困难的发现提供了一种简单的方法来建立一个简单的Clojure的WebSocket客户端库。 (公平地说,好像这不是很常见的一个WebSocket的客户端在非浏览器/ JavaScript的背景下,这就是为什么有似乎是如此强调Clojure的脚本的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。
我构建了一个基本的WebSocket客户端和服务器,它使用Java套接字和包装的WebSocket帧。 它的独特之处在于服务器可以同时接受常规的套接字连接以及WebSockets的同时。
http://github.com/viperscape/gulfstream
例如客户机代码:
(def clienthandler
(with-conn server
(send! server "i'm here!")
(with-data server data (prn "client received" data))
(prn "client is now disconnected")))
(def ws-conn-details {:host "ws://echo.websocket.org/chat",:handler clienthandler})
(def client-conn (start-client ws-conn-details))