torrent-create-stream
v1.1.1
Published
Create a torrent file with a stream-getter interface
Downloads
55
Maintainers
Readme
torrent-create-stream
This package is an alternative package to create torrent files. It has two main advantages over the torrent-create package:
This package allows to create torrent files from dynamically generated streams. This is useful if you want to create a torrent file from a stream that is not a file on the disk but rather a large file that is generated in memory or from a database which you don't want to load completely into memory.
This package writes to an output stream instead of a file.
Install
npm install torrent-create-stream
Usage
import createTorrent from 'torrent-create-stream'
import fs from 'fs'
await createTorrent({
files: [
{
name: "file_from_memory.txt",
length: 100,
getStream: (startAt, endAt) => {
return new Readable({
read() {
for (let i = startAt; i < endAt; i++) {
this.push("a")
}
this.push(null)
}
})
}
},
{
name: "file_from_os.txt",
length: fs.statSync("./file_from_os.txt").size,
getStream: (startAt, endAt) => {
return fs.createReadStream("./file_from_os.txt", {
start: startAt,
end: endAt
})
}
}
],
announce: [
['udp://tracker.leechers-paradise.org:6969'],
['udp://tracker.coppersurfer.tk:6969'],
['udp://tracker.opentrackr.org:1337'],
['udp://explodie.org:6969'],
['udp://tracker.empire-js.us:1337'],
['wss://tracker.btorrent.xyz'],
['wss://tracker.openwebtorrent.com'],
['wss://tracker.webtorrent.dev']
],
isPrivate: true,
name: "Test Torrent"
}, fs.createWriteStream("./test.torrent"))
Benchmark
for reference or if you want to run the benchmark yourself, see benchmark.js
10MB File Torrent Creation
| package | speed | avg time | | --- | --- | --- | | torrent-create | 41 ops/sec | 24ms | | node-torrent-stream | 42 ops/sec | 23ms | | torrent-create-stream (this package) | 53 ops/sec | 18ms |
2GB File Torrent Creation
| package | avg time | | --- | --- | | torrent-create | 4s | | node-torrent-stream | 5s | | torrent-create-stream (this package) | 2s |
Contributing
Feel free to contribute to this project. Fork and make a Pull Request, or create an Issue if you see any problem.