1.0.0 • Published 1 year ago
socket.io-streamr v1.0.0
socket.io-streamr
A Socket.IO streaming module that enables efficient file streaming between Socket.IO servers using various adapters. This module is particularly useful for distributed systems where file transfers need to occur across different Socket.IO instances. This module is inspired by socket.io-stream but supports redis streams.
Features
- Stream files between Socket.IO servers and clients
- Support for multiple adapters
- Progress tracking for file transfers
- Memory-efficient streaming
Supported Adapters
- Redis
- Redis Streams
- Mongo (test included but not tested)
Installation
npm install socket.io-streamrBasic Usage
Server Side
const { Server } = require('socket.io');
const ss = require('socket.io-streamr');
const Redis = require('ioredis');
const { createAdapter } = require('socket.io-redis');
// Setup Socket.IO server
const io = new Server(server);
// Configure Redis adapter
const pubClient = new Redis('redis://localhost:6379');
const subClient = pubClient.duplicate();
io.adapter(createAdapter(pubClient, subClient));
// Handle file streaming
io.on('connection', (socket) => {
const stream = ss(socket).createStream();
// Emit file through Redis
io.emit('file', stream, {
name: 'example.txt',
size: fileSize
});
// Pipe file to stream
fileStream.pipe(stream);
});Client Side
const { io } = require('socket.io-client');
const ss = require('socket.io-streamr');
const socket = io('http://localhost:3000');
ss(socket).on('file', (stream, data) => {
// Handle incoming file stream
let received = 0;
stream.on('data', (chunk) => {
received += chunk.length;
const progress = (received / data.size * 100).toFixed(2);
console.log(`Download progress: ${progress}%`);
});
// Pipe to destination
stream.pipe(fs.createWriteStream(data.name));
});API Reference
Server-side Methods
ss(socket).createStream(options): Creates a new stream for file transferss(socket).emit(event, stream, data): Emits a stream with associated metadata
Client-side Methods
ss(socket).on(event, callback): Listens for incoming streamsstream.on('data', callback): Handles chunks of incoming datastream.on('end', callback): Triggered when stream ends
Note about Client and Server
Either side can be used as the source or destination of the stream. The Client and Server usage is just an example but works either way
Testing
npm install
npm testDebugging
To see the debug logs, set the environment variable DEBUG to socket.io-streamr:*
example: DEBUG=socket.io-streamr:* npm test
License
This project is licensed under the Apache License - see the LICENSE file for details.
Acknowledgments
- socket.io-stream for the original idea
1.0.0
1 year ago