# sw-p2p-engine
**Repository Path**: MemoryFast/sw-p2p-engine
## Basic Information
- **Project Name**: sw-p2p-engine
- **Description**: SW P2P Engine 采用最先进的HTML5技术——WebRTC来做点对点传输,ServiceWorker来代理网络请求,还有IndexedDB来缓存数据,打造了一个去中心化的静态资源加速网络
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: https://www.cdnbye.com/cn/
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 15
- **Created**: 2021-06-26
- **Last Updated**: 2021-06-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
**[English](README.md) | 简体中文**
去中心化静态资源加速网络
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 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ |
## 准备工作
#### 绑定域名
访问`https://www.cdnbye.com/oms`,注册并绑定域名。
#### 网站迁移到HTTPS
由于 Service Worker 需要在HTTPS下才能生效,请确保你的网站已经迁移到HTTPS。
你可以使用 [Let's Encrypt](https://letsencrypt.org/) 来生成免费的证书。请参考 [这里](https://letsencrypt.org/getting-started/) 的教程。
## 部署 Service Worker
ServiceWorker 是实现P2P加速的关键。只要将 [sw.js](./dist/sw.js) 部署到网站的根目录即可,如 https://yourwebsite.com/sw.js
可以自定义配置或者采用默认配置。
#### 快速集成
拷贝 [sw.js](./dist/) 到服务器的域名根目录, 并确保可以通过 https://yourwebsite.com/sw.js 访问。
#### 自定义集成
在服务器的域名根目录创建一个 sw.js 文件,并引入 PeerWorker ,创建实例:
```javascript
// import peer-worker into service worker
self.importScripts('https://cdn.jsdelivr.net/npm/swarmcloud-sw@latest/dist/peer-worker.min.js');
var worker = new PeerWorker({
version: 1,
logLevel: 'warn',
allowOrigins: ['https://third-party-site.com'], // 允许加速的第三方Origin白名单,请参考:https://www.cdnbye.com/cn/views/sw/API.html#%E7%AC%AC%E4%B8%89%E6%96%B9%E8%B5%84%E6%BA%90%E5%8A%A0%E9%80%9F
});
worker.register();
```
部署完成后,SwarmCloud 的 ServiceWorker 将拦截全站的网络请求,并在P2P和CDN之间智能切换。
## 集成 P2P Engine
P2P Engine 用于启动 ServiceWorker 并运行P2P调度逻辑。同样, 可以自定义配置或者采用默认配置。
#### 快速集成
如果不需要自定义配置,只需要在网站主页 index.html 加上一行脚本即可:
```html
...
```
注意,参数必须是"auto=true"才会自动安装。
#### 自定义集成
引入脚本,并创建 P2PEngineSW 实例,该实例可以自定义配置:
```html
...
```
也可以通过npm引入:
```bash
$ npm install swarmcloud-sw
```
```javascript
import P2PEngineSW from 'swarmcloud-sw';
// Create P2PEngineSW instance...
```
## 验证
打来调试控制台,如果有打印 "ServiceWorker registration successful with scope" 则表示已正常工作。
## API文档
参见 [API.md](https://www.cdnbye.com/cn/views/sw/API.html)
## 开源赞助计划
所有开源项目或者技术博客等非营利性站点,均可申请永久免费使用,请联系客服开通服务。
## 相关项目
- [hlsjs-p2p-engine](https://gitee.com/cdnbye/hlsjs-p2p-engine) - HLS协议的Web端P2P流媒体方案。
- [dashjs-p2p-engine](https://github.com/cdnbye/dashjs-p2p-engine) - MPEG-dash协议的Web端P2P流媒体方案。
- [mp4-p2p-engine](https://github.com/cdnbye/mp4-p2p-engine) - 支持MP4的Web端P2P流媒体方案。
## FAQ
我们收集了一些[常见问题](https://www.cdnbye.com/cn/views/FAQ.html)。在报告issue之前请先查看一下。
## 联系我们
邮箱:service@cdnbye.com