This project uses Break Versioning as of Aug 16, 2014.
Trivial, non-breaking release that adds a pair of optional web-adapter aliases to help make examples a little simpler.
[com.taoensso/sente "1.4.1"]
This is a major BREAKING release. Biggest change is added support for web servers besides http-kit (only Immutant for now). A big thanks to @tobias for his assistance with the Immutant support.
- BREAK: added support for web servers besides http-kit (see migration instructions) [@tobias #2]
- BREAK: removed support for
nil
user-id broadcasts (previously deprecated in v1.3.0) [#85] [1] - Fix: temporary workaround for core.async router error-catching issues [@shaharz #97]
- New: throw clear compile-time exception on encore dependency issues
- New: enable clients to distinguish between auto/manual reconnects [@sritchie #105] [2]
- New: allow arbitrary user-provided handshake data with :chsk/handshake events [@whodidthis #110 #111] [3]
- Ref example: some clarifications re: how to authenticate users
[com.taoensso/sente "1.4.0"]
[1]: Server-side (chsk-send! <user-id> <event>)
calls used to broadcast to all nil-uid users when <user-id>
was nil
. Now you must use the special :sente/all-users-without-uid
keyword for these cases. The new behaviour helps prevent unintentional broadcasting.
[2]: :chsk/state
event data now contains :requested-reconnect?
val.
[3]: Server-side make-channel-socket!
fn now takes an optional :handshake-data-fn (fn [ring-req])
opt and client-side's ch-recv
now receives [:chsk/handshake [<?uid> <?csrf-token> <?handshake-data>]]
events.
- Http-kit is no longer an automatic Sente dependency. To continue using http-kit, add
[http-kit "2.1.19"]
to your project.clj:dependencies
. - Your Clojure-side
make-channel-socket!
call must now take a web server adapter as first argument. To continue using http-kit, add[taoensso.sente.server-adapters.http-kit]
to your Clojure-side ns form's:require
entries and passtaoensso.sente.server-adapters.http-kit/http-kit-adapter
as the first arg tomake-channel-socket!
.
So:
[http-kit "2.1.19"] ; <--- Add to project.clj :dependencies
(ns my-clj-ns
(:require
;; Other stuff
[taoensso.sente.server-adapters.http-kit] ; <--- Add this entry
))
;; (sente/make-channel-socket! <opts-map>) ; Old Clojure-side chsk constructor
(sente/make-channel-socket!
taoensso.sente.server-adapters.http-kit/http-kit-adapter ; <--- Add this arg
<opts-map) ; NEW Clojure-side chsk constructor
This change is a once-off nuisance that'll allow us the freedom of supporting a wide range of web servers in the future. Interested in a web server besides http-kit or Immutant? Am now welcoming PRs to support additional web servers.
Finally, please see the updated reference example project for instructions on switching to an alternative web server like Immutant.
/ Peter Taoussanis
This is a non-breaking maintenance release focused on general housekeeping + on adding some user-id flexibility.
- DEPRECATED [#85]: Server->user broadcasts should now use
:sente/all-users-without-uid
instead ofnil
uid when intending to broadcast to users without a user id. The new behaviour is less accident prone. - CHANGE [#84, #95]: Improve error reporting in the case of missing Ring middleware.
- FIX [#94]: ClojureScript dependency is now
:provided
to keep it from being unnecessarily pulled into JARs, etc (@zentrope). - NEW [#82]: Server-side
:user-id-fn
's Ring request now includes a:client-id
arg provided by clients. - Various doc+example improvements.
This is a maintenance release that is non-breaking UNLESS:
- You are not using the default server-side chsk router.
- You are relying on (
?reply-fn <args>)
to log a warning rather than throw an NPE for nil?reply-fn
s.
- FIX: Broken chsk router shutdown due to http://goo.gl/be8CGP.
- BREAKING [#77]: No longer substitute a dummy (logging)
?reply-fn
for non-callback events.
- FIX: taoensso/timbre#79 (unnecessary deps being pulled in).
- NEW: Added client-side
ajax-call
utility. - NEW: Added keys to
event-msg
s::id
(event-id),:?data
(event-?data).
This is a MAJOR release with a bunch of improvements, most notably efficiency improvements. It is BREAKING if-and-only-if you read from the client-side :ch-recv channel directly.
- NEW: Added
chsk-destroy!
client-side API fn. - NEW [#60]: Several transfer format efficiency improvements (faster, less bandwidth use).
- NEW [#12], [#59], [#66], [#67]: Added
:packer
option to client+server-sidemake-channel-socket!
fns. This can be used to plug in an arbitrary de/serialization format. The default continues to be edn (which gives the best common-case performance and doesn't require any extra dependencies). An experimental Transit-based packer is included which allows manual + smart (automatic) per-payload format selection. See the updated reference example for details. Big thanks to @ckarlsen for getting the work started on this! - DEPRECATED:
start-chsk-router-loop!
->start-chsk-router!
(both client + server-side). There's a new event-handler format that's consistent between the client + server, and that makes componentizing Sente considerably easier. See the updated reference example for details. Big thanks to @hugoduncan for his work & input on this! - CHANGE: Client-side router now traps+logs errors like the server-side router.
- CHANGE: General code improvements/refactoring, stuff I'd been meaning to do forever and wanted to get in before a v1 release.
- CHANGE: Further improvements to the reference example to make it play better with LightTable.
- BREAKING: the client-side
:ch-recv
channel now receivesevent-msg
(maps) rather thanevent
(vectors).(:event <event-msg>)
will return theevent-msg
'sevent
.
Hotfix focused on adjusting default options for Heroku users.
- FIX [#56]: Decrease default keep-alive values to work with Heroku's http-routing timeouts.
- Minor reference example improvements.
Minor, non-breaking update.
- CHANGE: Support for new (namespaced) Ring Anti-Forgery session key (@DomKM).
- CHANGE:
[chsk/uidport-close]
event now triggers only 5 seconds after a WebSocket channel is closed (same as Ajax channels). Helps prevent unnecessary noise during window refresh, etc. - NEW [#50]: Added a
:chsk-url-fn
option to client-sidemake-channel-socket!
fn for full URL control.
Minor, non-breaking update.
- FIX: Handshakes were interfering with singleton WebSocket callback replies.
Minor, non-breaking update.
- FIX: WebSocket reconnect exponential backoff wasn't being reset correctly.
- [#39] FIX: Race condition affecting buffered
server>user
events (@smichal). - NEW:
[chsk/uidport-open]
,[chsk/uidport-close]
server-side events generated on a uid connecting/disconnecting (any protocol). As before, you can watch theconnected-uids
atom for more detailed info.
This is a major release focused on simpler out-the-box setup + easier integration with a wide range of login/auth types.
- BREAKING: API fns removed:
chsk-type
,chsk-open?
. - BREAKING: The
[:chsk/state]
event form has changed for added flexibility. - NEW: Added watchable, read-only
:state
atom to client-sidemake-channel-socket!
fn result. Among other things, this atom contains any user-id provided by the server. - NEW: It is now possible to push server>user async events to clients without a user-id by providing a
nil
user-id to the server-sidechsk-send!
fn (previouslynil
uids would throw an assertion error). In particular, this means it's now possible to broadcast to users that aren't logged in. - NEW: Server-side
make-channel-socket!
fn has picked up a:csrf-token-fn
option which defaults to compatibility with the Ring-Anti-Forgery middleware. - NEW: Clients are now entirely self configuring. It's no longer necessary to transfer any state (like csrf-token or user-id) from the server; this'll be done automatically on channel socket handshake.
- NEW: Added a
chsk-reconnect!
API method that can be called to easily re-establish a channel socket connection after a login or auth change. An example login procedure has been added to the reference example project. - CHANGE: The example project now randomly selects
:ajax
or:auto
connection mode.
As always, feedback welcome on any changes here. Have fun, cheers! - Peter
- NEW: server- and client-side
start-chsk-router-loop!
fns now return a(fn stop! [])
. - [#37] FIX broken
[:chsk/close]
typo for Ajax connections (@sritchie).
- CHANGE: Removed vestigial server-side events:
[:chsk/uidport-open _]
,[:chsk/uidport-close _]
. - CHANGE: Significantly improved Ajax broadcast performance by interally making use of
connected-uids
data. - NEW:
[:chsk/close]
event can now be sent to clients to disconnect them (this feature was previously experimental + undocumented). - FIX:
connected-uids
was incorrectly marking multi-client users as disconnected when any one of their clients disconnected.
- [#27] FIX broken :advanced mode compilation (@ostronom).
- BREAKING CHANGE: ClojureScript (client-side)
make-channel-socket!
fn signature has changed:
;; OLD (note two opts maps):
(make-channel-socket! {:csrf-token "foo" :has-uid? true} {:type :auto}) ; Old
;; NEW (note single opts map):
(make-channel-socket! {:csrf-token "foo" :has-uid? true :type :auto}) ; New
- [#22] NEW: Server-side
make-channel-socket!
constructor now supports an optional:user-id-fn
(fn [ring-req]) -> user-id
setting (@sritchie). - [#23] NEW: Server-side
make-channel-socket!
now returns a:connected-uids
atom.
This is a non-breaking release focused on efficiency+reliability improvements for very high stress environments.
- Documentation improvements.
- CHANGE: server>user Ajax push is now more reliable against dodgy connections.
- NEW: server>user sends are now automatically+transparently batched for greater efficiency in very high throughput environments. The server-side
make-channel-socket!
has picked up some knobs for this, but the defaults are sensible.
- NEW: Copy improved error messages to server-side API.
- CHANGE: Provide entire, unfiltered Ring request map to server-side API.
- NEW: Improved error messsages for malformed events.
- NEW: Initial public release.