Io
higher-level engine.io client.
Install / Use
/learn @matthewmueller/IoREADME
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
Related Skills
node-connect
345.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
106.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
345.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
345.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
