WebRTC Data Channel is an important feature of WebRTC that allows transferring non-media data over peer-to-peer connections.
Roles of Data Channel:
- Low-latency data transfer: Suitable for real-time games, collaboration tools and other scenarios requiring low latency
- Secure transmission: Uses DTLS encryption to ensure data transmission security
- Peer-to-peer transmission: No need for server relay, reducing latency and server load
- Bidirectional communication: Supports full-duplex communication, both parties can send and receive data simultaneously
- Reliability options: Supports reliable transmission (similar to TCP) and unreliable transmission (similar to UDP)
Steps to use Data Channel for non-media data transfer:
-
Create Data Channel:
javascript// After creating RTCPeerConnection const dataChannel = peerConnection.createDataChannel('myDataChannel', { ordered: true, // Whether to guarantee order maxRetransmits: 3, // Maximum retransmission times reliable: true // Whether to use reliable transmission }); -
Listen for Data Channel events:
javascript// Sender listens dataChannel.onopen = () => { console.log('Data channel opened'); dataChannel.send('Hello WebRTC!'); }; dataChannel.onmessage = (event) => { console.log('Received message:', event.data); }; dataChannel.onclose = () => { console.log('Data channel closed'); }; dataChannel.onerror = (error) => { console.error('Data channel error:', error); }; -
Receiver handles Data Channel:
javascriptpeerConnection.ondatachannel = (event) => { const receivedDataChannel = event.channel; receivedDataChannel.onopen = () => { console.log('Received data channel opened'); }; receivedDataChannel.onmessage = (event) => { console.log('Received message:', event.data); }; }; -
Send data:
javascript// Send text dataChannel.send('Hello'); // Send Blob const blob = new Blob(['Hello Blob'], { type: 'text/plain' }); dataChannel.send(blob); // Send ArrayBuffer const buffer = new ArrayBuffer(8); const view = new Uint8Array(buffer); view[0] = 42; dataChannel.send(buffer);
Application scenarios:
- Real-time game player state synchronization
- Real-time whiteboard data in collaboration tools
- Real-time text chat
- File transfer
- Sensor data transmission