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:
jsonednidentity
After you're done, close the socket:
(ws/close socket)To get an interactive development environment run:
lein figwheeland 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 cleanTo create a production build run:
lein do clean, cljsbuild once minAnd 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 testNote: 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.