P2P流媒体引擎

vuePress-theme-reco    2018 - 2021
P2P流媒体引擎 P2P流媒体引擎

Choose mode

  • dark
  • auto
  • light
在线文档
  • 快速入门
  • Web SDK

    • Hls.js
    • MP4
    • Dash.js
    • Shaka-Player
    • 大文件下载
    • 网站加速
  • Android SDK
  • iOS SDK
  • Flutter SDK
价格
解决方案
  • 机顶盒/IPTV
控制台
关于我们
GitHub
language
  • English
  • 简体中文

在线文档
  • 快速入门
  • Web SDK

    • Hls.js
    • MP4
    • Dash.js
    • Shaka-Player
    • 大文件下载
    • 网站加速
  • Android SDK
  • iOS SDK
  • Flutter SDK
价格
解决方案
  • 机顶盒/IPTV
控制台
关于我们
GitHub
language
  • English
  • 简体中文
  • 快速入门
  • 常见问题
  • 信令服务
  • P2P优化
  • 控制台

    • 绑定域名/AppId
    • 数据分析
    • P2P控制
    • Restful API
  • Hls.js SDK

    • 简介
    • 使用方法
    • 第三方播放器
    • CMS集成
    • API文档
    • CDN
    • 更新日志
  • 安卓 SDK

    • 简介
    • 使用方法
    • API文档
    • 更新日志
  • iOS SDK

    • 简介
    • 使用方法
    • API文档
    • 更新日志
  • Flutter SDK

    • 简介
    • 使用方法
    • API文档
    • 更新日志
  • 网站加速 SDK

    • 简介
      • 使用方法
      • API文档
      • 更新日志
    • Shaka-Player SDK

      • 简介
      • 使用方法
      • 第三方播放器
      • API文档
      • 更新日志
    • Web MP4 SDK

      • 简介
      • 使用方法
      • 第三方播放器
      • API文档
      • 更新日志
    • Dash.js SDK

      • 简介
      • 使用方法
      • 第三方播放器
      • API文档
      • 更新日志
    • 大文件下载 SDK

      • 简介
      • 使用方法
      • API文档
      • 更新日志
    • 安卓 SDK 1.x

      • 简介
      • 使用方法
      • API文档
      • 更新日志
    • 更多

      • 技术原理
      • 用户服务协议

    简介

    vuePress-theme-reco    2018 - 2021

    简介


    去中心化静态资源加速网络。

    npm jsdelivr

    SW P2P Engine 采用最先进的HTML5技术——WebRTC来做点对点传输,ServiceWorker来代理网络请求,还有IndexedDB来缓存数据,打造了一个去中心化的静态资源加速网络。在不影响用户体验的前提下,利用终端设备的闲置带宽和少量的磁盘空间,创造一个可无限扩展的P2P网络,大幅节省网站的CDN成本。

    # 特性

    • 浏览器原生支持,不需要安装任何插件,采用仿BT算法,在线人数越多效果越好
    • 支持大部分静态文件类型,包括js、css、图片和音频等
    • 智能缓存和预加载资源
    • 数据加密传输
    • 浏览器不支持WebRTC时无缝切换到HTTP下载模式
    • 可与所有CDN搭配使用,无需改造服务端
    • Tracker服务器根据访问IP的ISP、地域等进行智能调度

    # 浏览器支持情况

    由于WebRTC已成为HTML5标准,目前大部分主流浏览器都已经支持。兼容性取决于浏览器是否支持 WebRTC, ServiceWorker 和 IndexedDB。

    兼容性 Chrome Firefox Mac Safari 安卓微信/QQ Opera Edge iOS Safari IE
    WebRTC ✔ ✔ ✔ ✔ ✔ ✔ ✔ ❌
    Service Worker ✔ ✔ ✔ ✔ ✔ ✔ ✔ ❌
    IndexedDB ✔ ✔ ✔ ✔ ✔ ✔ ✔ ❌
    SwarmCloud ✔ ✔ ✔ ✔ ✔ ✔ ✔ ❌

    # 工作原理

    • 首先由客户端嵌入的js库 sw-p2p-engine 注册 ServiceWorker
    • ServiceWorker 通过监听 fetch 事件,拦截全站的网络请求,并将可缓存的静态资源(如 https://yourwebsite.com/kitty.png)保存在 IndexedDB 中
    self.addEventListener('fetch', event => { /* ⛦ magic here ⛦ */ })
    
    • 判断一个网络请求是否可缓存的依据是:
      • 响应头包含缓存相关的字段,如 Cache-Control 或者 Expires
      • 目标资源是允许缓存的静态资源(如 jpg, png, js, css, mp3等)
    • 一旦网络响应被视为可缓存的,在后台工作线程中,PeerWorker会分别对这些资源进行缓存、索引、切片、加密以及通过P2P网络进行分发
    • 当资源被一个设备缓存之后,其他设备在请求相同资源时,将尝试优先通过P2P网络就近从该设备获取资源,而不是从成本更高、距离更远的源服务器获取(即用WebRTC替代HTTP)
    • 从P2P网络获取失败或者不能缓存的资源,将自动回源

    # 最佳实践

    • 准备工作
      • 为网站申请HTTPS证书
      • 在CDNBye控制台注册账号并在 网站管理 界面添加域名
    • 将 SDK 放在网站入口页面,比如网站的首页
    • 将用户的 http 访问请求自动跳转到 https ,从而保证 P2P 可以正常工作
    • 用户在内嵌 SDK 的页面点击跳转到其他页面时,在新的tab打开页面,保持原页面不被覆盖
    • 尽量将图片等资源放在当前域名下,减少跨域配置等额外工作量
    • 如果不得不使用第三方域名的资源(比如阿里云的CDN加速),请记得在CDN配置跨域头,并且在 SDK 侧将第三方域名加入白名单,详细步骤请参考这里
    • 中长视频和大文件等体积较大的资源不适合使用本 SDK 加速