use*_*578 15 client clojure websocket
我已经使用http-kit设置了一个WebSocket服务器,它应该接受Web套接字连接.这是http-kit文档中显示的基本示例.
问题是: 如何创建连接它的Clojure客户端?
客户端可以是任何Clojure http库,我真的不介意.我已经了解了Javascript客户端,我相信Java有一个我可以在Clojure中使用的API.但是,我期待的是支持WebSockets的一个Clojure的库都为客户端和服务器.我在http-kit代码中没有看到任何可以轻松实现的内容.
小智 9
http-kit的客户端还不支持WebSocket(我想不出一个好的API).对于这种用例,Aleph是一个很好的选择.另一个选项是http.async.client,我在http-kit的服务器的websocket单元测试中使用它:这里
根据这一公告,http-kit支持Web套接字.如果您不受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!")
Run Code Online (Sandbox Code Playgroud)
对于那些在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))
Run Code Online (Sandbox Code Playgroud)
最后的无限循环只是为了防止进程结束.在我按下Ctrl-C之前,从套接字接收的消息将打印到STDOUT.
归档时间: |
|
查看次数: |
5208 次 |
最近记录: |