io-component

higher-level engine.io client.

io

higher-level engine.io 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 engine.io.

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.

IO('localhost:8080/news/today')
// 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?

Engine.io 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 engine.io 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 = io.channel('cheerio');
var superagent = io.channel('superagent');
 
cheerio.emit('install');
superagent.emit('install');
 
cheerio.on('complete', fn);
superagent.on('complete', fn);

You can also split an already split socket:

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

Close the connection

make test

Note you'll need serve

  • Fix pathname support on node client

MIT