1

我尝试用电子和 webtorrent 编写一个小的 torrent 客户端。起初一切似乎都很好,但有时当一个 torrent 完成下载时,结果文件没有被写入磁盘。

我的项目是通过 SimulatedGREG/electron-vue 样板设置的。

这是我的洪流客户端类的代码:

const WebTorrent = require('webtorrent');
const client = new WebTorrent();  
export default class TorrentClient {
  download (downloadInfo) {
    console.log('download torrent from magnet link:', downloadInfo.magnetLink);

    let torrent = client.add(downloadInfo.infoHash);
    torrent.on('download', function (bytes) {
      console.log('just downloaded: ' + bytes);
      console.log('total downloaded: ' + torrent.downloaded);
      console.log('download speed: ' + torrent.downloadSpeed);
      console.log('progress: ' + torrent.progress);
    });
    torrent.on('done', function () {
      console.log('done...');
    });
  }
}
4

2 回答 2

1

下载后 Electron 应用程序会关闭,还是继续运行?(如果是前者,您需要一种方法来延迟关闭,直到您确定写入已完成。例如,确保没有未解决的承诺。)

done如果并非所有内容都写入磁盘,该消息是否会发生?

您需要将两个错误处理程序添加到代码中,它们可能会解释问题。

客户端有一个错误处理程序

torrent 对象也有一个错误处理程序

于 2019-12-27T09:34:05.963 回答
0

更新:我解决了这个问题。

在我调试了 webtorrent 使用的 fs-chunk-store 之后,我发现在数据写入磁盘之前就抛出了一个错误。当调用 fs.mkdir 为下载目标创建新路径时会发生错误(ENOENT:没有这样的文件或目录,mkdir 'path/to/folder')。如果没有回调函数作为参数,错误将不会打印到标准输出。

我现在的解决方案是使用 fs-chunk-store 的自定义实现,它允许递归地创建文件夹。

于 2019-12-29T12:49:44.393 回答