A thin and lightweight(no external dependencies) websocket client for ClojureScript.
There are already existing Clojure/Clojurescript websocket libraries like Sente and Chord. However these libraries support creating both websocket server and client. This requires additional dependencies which we didn't want. Wscljs is a thin wrapper over the Javascript websockets and brings in no extra dependency.
(require '[wscljs.client :as ws]
To create a new websocket connection:
(def socket (ws/create "ws://...." handlers))
where handlers
is a map containing handler functions mapped to the following keys:
Required:
:on-message
=> called when recieving message on the socket
Optional:
:on-open
=> called when opening a socket connection:on-close
=> called when closing a socket connection:on-error
=> called when an error is received
For example, to print the data received by the socket, do:
(def handlers {:on-message (fn [e] (prn (.-data e)))
:on-open #(prn "Opening a new connection")
:on-close #(prn "Closing a connection")})
(def socket (ws/create "ws://...." handlers))
To send json data over the socket, do:
(require '[wscljs.format :as fmt])
(ws/send socket {:command "ping"} fmt/json)
The supported formats are:
json
edn
identity
After you're done, close the socket:
(ws/close socket)
To get an interactive development environment run:
lein figwheel
and open your browser at localhost:3449. This will auto compile and send all changes to the browser without the need to reload. After the compilation process is complete, you will get a Browser Connected REPL. An easy way to try it is:
(js/alert "Am I connected?")
and you should see an alert in the browser window.
To clean all compiled files:
lein clean
To create a production build run:
lein do clean, cljsbuild once min
And open your browser in resources/public/index.html
. You will not
get live reloading, nor a REPL.
Inorder to run tests, you need to have PhantomJS installed. After installing it, run the tests:
lein test
Note: I've only tested this with Phantom 2.1.1. As per this comment, using < 2.x may not work.
- Abhik Khanra (@trycatcher)
- Kiran Gangadharan (@kirang89)
- Udit Kumar (@yudistrange)
Copyright © 2017 Nilenso Software LLP
Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.