ChuckT is an event transport system built on the SockJS websocket API. This module is the server-side implementation of ChuckT and is designed to complement the client-side ChuckT JavaScript library.This fork future implements publish/subscribe derived by redis.

ChuckT node module

ChuckT-node is a node server component for triggering and/or listening to events over the SockJS websocket API. This client is intended to be used in conjunction with the client-side ChuckT JavaScript library:


Injects publish and subscribe into ChuckT which almost replicates and simplifies the core features of into sockjs.


The recommended way to install chuckt-node is through npm:

npm install chuckt_redis

ChuckT instances require a socket connection:

var sockjs = require('sockjs');
var chuckt = require('chuck_redis');
// To set a global reference to all clients 
var connections={};
// A global reference to the redis publisher 
var publisher = redis.createClient();
var sock = sockjs.createServer();
sock.on('connection', function(conn) {
  var socket = new ChuckT(conn,connections,publisher);
  // ... do chuckt stuff like add listeners or emit events 

By default the clients don't subscribe to namespaces, as not all clients require to be join any namespaces. To initialise pubsub for a client


chuck_redis has 4 basic methods

socket.emitToBrowser('some-event', 'bar');
socket.emitToAllBrowsers('some-event', 'bar');
socket.emitToChannel('some-event', 'bar');
socket.emitToPeers('some-event', 'bar');

Functions such as emitToBrowser and emitToAllBrowsers works even if a user if not part of any namespaces.

When any emit function is called you can send any number or arbitrary arguments.

Any number of arguments and even a callback can be passed with events. The callback is essentially just a proxy to a callback that is defined (and executed) on the frontend:

chuckt.on('another-event', function(arg1arg2callback) {
  // ... do stuff with arguments 

Some events may only pass a callback:

chuckt.on('another-event-2', function(callback) {
  // ... do stuff without arguments 

You may want to pass arguments back to the frontend's callback:

chuckt.on('another-event-3', function(callback) {
  // ... do stuff without arguments 
  callback('dear frontend', 'you may find these arguments compelling');

And sometimes, your event may not come with any arguments nor a callback:

chuckt.on('another-event-4', function() {
  // ... do stuff without ever acknowledging receipt 

A big thanks to epixa/chuckt-node for making event driven possible in sockjs.