i personally think this was an important change as the default encoding of maps to be sent as json is somewhat lossy (keywords converted to strings, would never be able to get this 100% perfect using json alone without a more complex encoding solution). encoding to edn is the perfect solution to this. since browserchannel pretty much requires the final sent data to be json encoded, we just serialize the clojure data being sent to an edn string within a root json object. this does ultimately mean we have to do a little bit of pre-parsing of sent and received maps to encode/decode properly and make it completely transparent to application code, but i think it's an acceptable tradeoff. |
||
---|---|---|
.. | ||
resources | ||
src/chat_demo | ||
Procfile | ||
project.clj | ||
README.md |
chat-demo for clj-browserchannel
Cross-browser compatible, real-time, bi-directional communication between ClojureScript and Clojure using Google Closure BrowserChannel.
See also: [clj-browserchannel][1] [1]:https://github.com/thegeez/clj-browserchannel
Demo
clj-browserchannel-demo is an example chat application using a server side implementation for BrowserChannel written in Clojure. The server component is for BrowserChannel version 8.
This enables client->server and server->client communication in ClojureScript and Closure web apps, without any javascript dependencies other than the Google Closure library.
The example runs in at least:
- Chrome
- Firefox
- Internet Explorer 5.5+ (!!)
- Android browser
Running
You can either start it up directly from a REPL by simply running:
(-main)
Or you can run it easily from a command line via the included Leiningen alias to build and run everything:
$ lein rundemo
Once the application server is running, you can then open up http://localhost:8080/ in your browser. Open it in multiple browser windows to see the chat communication in action.
At the bottom of the -main
function in chat-demo.server
, you can
comment/uncomment out the different run-
functions to choose which
web server you want to test out the demo with.
About
Written by: Gijs Stuurman / @thegeez / Blog / GitHub
Updated by: Gered King / @geredking / Github
License
Copyright (c) 2012 Gijs Stuurman and released under an MIT license.