百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

WebTorrent 替代 WebRTC 火了!可以自己做 QQ 了?

myzbx 2025-01-02 17:55 36 浏览

家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

1. 什么是 WebTorrent

WebTorrent 是适用于 Node.js 和浏览器的流式 torrent 客户端,完全由 JavaScript 编写,因此相同的代码可以在多个运行时中运行。

The streaming torrent client. For node.js and the web.

但是 WebTorrent 对 Node.js 的浏览器的支持原理完全不同:

  • Node.js :WebTorrent 使用 TCP 和 UDP 与其他 torrent 客户端通信
  • 浏览器:WebTorrent 使用 WebRTC 进行点对点内容传输,无需任何浏览器插件、扩展或安装过程即可快速使用。

但是需要注意的是,WebTorrent 不支持浏览器中的 UDP/TCP 对等点。

为了使 BitTorrent 借助于 WebRTC 这个唯一的 Web 上 P2P 文件传送能力,WebTorrent 对协议进行了一些更改。 因此,基于浏览器的 WebTorrent 客户端或 “web peer” 只能连接到支持 WebTorrent/WebRTC 的其他客户端。

为了将任何文件传送到 Web 对等点,开发者可以采用以下方式:

  • WebTorrent 的客户端,例如: WebTorrent Desktop
  • 命令行程序:webtorrent-hybrid
  • 网站:使用 Instant.io ,同时 Vuze torrent 客户端已添加 WebTorrent 支持

目前 WebTorrent 在 Github 上通过 MIT 协议开源,有超过 28.8k 的 star、2.7k 的 fork、3.8k 的项目依赖量,代码贡献者 200+、妥妥的前端优质开源项目。

2.WebTorrent 的优势概览

WebTorrent 的独特优势可以概括为以下几点:

  • 支持 Node.js 和浏览器环境且使用相同 npm 包,纯 Javascript 无任何本机依赖
  • 非常快速,支持多种子同时下载、同时将文件公开为流
  • 按需从 Web 获取片段,甚至在 torrent 完成之前支持搜索
  • 支持高级 torrent 客户端功能,支持多策略之间无缝切换
  • 用 ut_metadata 支持 Magnet URI,用 dht、tracker、lsd 和 ut_pex 实现对等发现
  • 用于添加新扩展的协议扩展 API、全面的测试套件且完全离线运行
  • 充分利用浏览器 / WebRTC 环境特性,无需任何插件实现 P2P 传送
  • 支持将视频种子流式传输到 <video> 标签(webm、mkv、mp4、ogv、mov 等(AV1、H264、HEVC*、VP8、VP9、AAC、FLAC、MP3、OPUS、Vorbis 等))
  • 支持 Chrome、Firefox、Opera 和 Safari 等大多数主流浏览器

3. 如何使用 WebTorrent

3.1 WebTorrent 基础用法

开发者只需在页面上包含 webtorrent.min.js 脚本即可开始使用 BitTorrent 协议通过 WebRTC 获取文件,或者使用 browserify 或 webpack 从 “webtorrent” 包导入 WebTorrent。

import WebTorrent from 'webtorrent'

下面是浏览器中文件下载代码示例:

import WebTorrent from 'webtorrent'

const client = new WebTorrent()
const magnetURI = '...'
client.add(magnetURI, torrent => {
  // Got torrent metadata!
  console.log('Client is downloading:', torrent.infoHash)
  for (const file of torrent.files) {
    document.body.append(file.name)
  }
})

WebTorrent 开箱即用的支持视频、音频、图像、PDF、Markdown 等文件类型,同时提供其他方法直接访问文件内容,包括:Stream 流、Buffer 缓冲区或 Blob URL。视频和音频内容还可以流式传输,即在下载完整文件之前开始播放。

注意:下载 torrent 会自动为其添加种子,使其可供其他人下载

在浏览器中传送文件更加简单,比如下面的示例:

import dragDrop from 'drag-drop'
import WebTorrent from 'webtorrent'

const client = new WebTorrent()
// 当用户在浏览器中拖拽文件时创建一个 WebTorrent 然后发送
dragDrop('body', files => {
  client.seed(files, torrent => {
    console.log('Client is seeding:', torrent.infoHash)
  })
})

注意,以上示例使用 drag-drop 包,使 HTML5 拖放 API 更易于使用。注意:如果不使用 browserify 等打包工具则可以使用独立文件 dragdrop.min.js。

3.2 WebTorrent 在 Node.js 中使用

在 Node.js 环境中,如果要使用可由浏览器对等点下载的 torrent(即支持 WebRTC)需要 webtorrent-hybrid。

import WebTorrent from 'webtorrent-hybrid'
const client = new WebTorrent()
client.seed('/seed-me.txt', function (torrent) {
    console.log('Client is seeding' + torrent.magnetURI)
})

这是因为在 node.js 中,webtorrent 包仅连接到普通的 TCP/UDP 对等点,而不是 WebRTC 对等点。而 webtorrent-hybrid 支持连接到所有类型的对等点,包括 WebRTC 对等点。

参考资料

https://github.com/webtorrent/webtorrent

https://github.com/feross/drag-drop

https://webtorrent.io/intro

https://github.com/webtorrent/webtorrent-hybrid

https://speakerdeck.com/feross/webtorrent-bringing-p2p-to-the-masses-with-webrtc

https://forums.raspberrypi.com/viewtopic.php?t=255038

相关推荐

如何设计一个优秀的电子商务产品详情页

加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...

怎么在JS中使用Ajax进行异步请求?

大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...

中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革

前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...

前端监控 SDK 开发分享_前端监控系统 开源

一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...

Ajax 会被 fetch 取代吗?Axios 怎么办?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...

前端面试题《AJAX》_前端面试ajax考点汇总

1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...

Ajax 详细介绍_ajax

1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...

6款可替代dreamweaver的工具_替代powerdesigner的工具

dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

福斯《死侍》发布新剧照 &quot;小贱贱&quot;韦德被改造前造型曝光

时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...

2021年超详细的java学习路线总结—纯干货分享

本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...

不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!

Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...

2025 年 Python 爬虫四大前沿技术:从异步到 AI

作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...

最贱超级英雄《死侍》来了!_死侍超燃

死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...

停止javascript的ajax请求,取消axios请求,取消reactfetch请求

一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...