node package manager


higher-level client.


higher-level client.

io-server is the recommended socket server, but any server that has event and channel events would work fine.

$ component install matthewmueller/io
var io = IO('localhost:8080/news');
// Custom events 
io.on('news', function(news) {...})
// Raw socket messages 
io.socket.on('error', function(err) {...})
// Send a message 
io.emit('news', news);

Initialize a new instance of IO. IO will pass these parameters into

IO supports url-based pooling or "rooms". If you connect with a pathname, IO will send the pathname to the server as a querystring. It's the responsibilty of the server to place these connections into rooms. io-server supports this kind of pooling.

// internally: new EngineIO('localhost:8080/?pathname=news/today'); 
IO('localhost:8080/news/tomorrow') // different pool than `/news/today` 
IO('localhost:8080/news') // gets updates from both `/news/today` and `/news/tomorrow` 

Why convert pathname to querystring? squelches pathnames but maintains query parameters, so IO converts any pathname to a querystring to that it can be obtained on the server-side.

Listen and respond to an event.

Access to the raw socket. Useful to listen to events such as open, close, etc.

Send a message to all connected clients (including itself) with the given event.

io.emit('reminder', data);

Split a single socket into multiple channels. In other words, #channel() creates a fresh socket without another connection.

If no channel is given, a unique id is used.

var io = IO('http://localhost:8080');
var cheerio ='cheerio');
var superagent ='superagent');
cheerio.on('complete', fn);
superagent.on('complete', fn);

You can also split an already split socket:

var script ='scriptID');
var cheerio ='cheerio');
console.log(cheerio.$channel) // scriptID:cheerio 

Close the connection

make test

Note you'll need serve

  • Fix pathname support on node client