io-component

higher-level [engine.io](http://github.com/learnboost/engine.io) client.

npm install io-component
9 downloads in the last week
27 downloads in the last month

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.

Installation

$ component install matthewmueller/io

Example

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);

API

IO(uri, [options])

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

Pooling

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.

io#on(event, fn)

Listen and respond to an event.

io#socket

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

io#emit(event, message)

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

io.emit('reminder', data);

io#channel([channel])

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

io#close()

Close the connection

Tests

make test

Note you'll need serve

TODO

  • Fix pathname support on node client

License

MIT

npm loves you