PeerJS 使用说明文档
目录
概述
PeerJS 是基于 WebRTC 的轻量级库,用于简化浏览器间点对点(P2P)通信的实现。它封装了 WebRTC 的复杂逻辑,提供简洁的 API 支持文本、文件、音视频等数据传输。
核心概念
- Peer
每个客户端实例,拥有唯一 ID(可通过服务器生成或自定义)。 - Connection
点对点连接通道,分为DataConnection
(数据传输)和MediaConnection
(音视频流)。 - PeerServer
信令服务器(默认提供或自建),用于协调连接的建立。
快速开始
安装
bash
npm install peerjs
# 或直接引入 CDN
<script src="https://unpkg.com/peerjs@1.4.7/dist/peerjs.min.js"></script>
初始化 Peer 对象
javascript
// 创建 Peer 实例(自动生成 ID)
const peer = new Peer({
host: 'your-peer-server.com', // 自建服务器时替换
port: 9000,
path: '/myapp'
});
peer.on('open', (id) => {
console.log('My Peer ID:', id);
});
案例说明
案例1:文本聊天
步骤
- 用户A 创建
Peer
实例并连接信令服务器。 - 用户B 通过已知 ID 发起连接请求。
- 双方通过
DataConnection
收发消息。
代码示例
javascript
// 用户A(监听连接)
peer.on('connection', (conn) => {
conn.on('data', (data) => {
console.log('Received:', data);
});
});
// 用户B(主动连接)
const conn = peer.connect('userA-id');
conn.on('open', () => {
conn.send('Hello from UserB!');
});
案例2:视频通话
步骤
- 用户A 获取本地媒体流并监听呼叫。
- 用户B 通过
MediaConnection
呼叫用户A。 - 双方交换音视频流并渲染到页面。
代码示例
javascript
// 用户A(应答呼叫)
peer.on('call', (call) => {
navigator.mediaDevices.getUserMedia({ video: true })
.then((stream) => {
call.answer(stream); // 应答并提供本地流
call.on('stream', (remoteStream) => {
document.getElementById('videoA').srcObject = remoteStream;
});
});
});
// 用户B(发起呼叫)
navigator.mediaDevices.getUserMedia({ video: true })
.then((stream) => {
const call = peer.call('userA-id', stream);
call.on('stream', (remoteStream) => {
document.getElementById('videoB').srcObject = remoteStream;
});
});
架构关系图
文本聊天流程
视频通话结构
注意事项
- 信令服务器
默认服务器peerjs.com
仅适用于测试,生产环境需自建(GitHub 仓库)。 - 安全性
HTTPS 环境下需配置secure: true
。 - 兼容性
部分浏览器需 polyfill(如webrtc-adapter
)。 - 错误处理
监听error
事件处理连接异常:
javascript
peer.on('error', (err) => {
console.error('PeerJS Error:', err);
});
通过本文档,开发人员可快速实现基于 PeerJS 的 P2P 功能。建议参考官方文档获取更多高级配置。