کانال های داده

استاندارد WebRTC همچنین یک API برای ارسال داده های دلخواه از طریق RTCPeerConnection را پوشش می دهد. این کار با فراخوانی createDataChannel() روی یک شی RTCPeerConnection انجام می شود که یک شی RTCDataChannel را برمی گرداند.

const peerConnection = new RTCPeerConnection(configuration);
const dataChannel = peerConnection.createDataChannel();

همتای راه دور می تواند کانال های داده را با گوش دادن به رویداد datachannel در شی RTCPeerConnection دریافت کند. رویداد دریافتی از نوع RTCDataChannelEvent است و حاوی یک ویژگی channel است که نشان دهنده RTCDataChannel متصل بین همتایان است.

const peerConnection = new RTCPeerConnection(configuration);
peerConnection.addEventListener('datachannel', event => {
    const dataChannel = event.channel;
});

باز و بسته شدن رویدادها

قبل از اینکه بتوان از یک کانال داده برای ارسال داده استفاده کرد، مشتری باید تا باز شدن آن صبر کند. این کار با گوش دادن به رویداد open انجام می شود. به همین ترتیب، برای زمانی که هر یک از طرفین کانال را ببندد، یک رویداد close وجود دارد.

const messageBox = document.querySelector('#messageBox');
const sendButton = document.querySelector('#sendButton');
const peerConnection = new RTCPeerConnection(configuration);
const dataChannel = peerConnection.createDataChannel();

// Enable textarea and button when opened
dataChannel.addEventListener('open', event => {
    messageBox.disabled = false;
    messageBox.focus();
    sendButton.disabled = false;
});

// Disable input when closed
dataChannel.addEventListener('close', event => {
    messageBox.disabled = false;
    sendButton.disabled = false;
});

پیام ها

ارسال پیام در یک RTCDataChannel با فراخوانی تابع send() با داده هایی که می خواهیم ارسال کنیم انجام می شود. پارامتر data برای این تابع می تواند یک رشته، یک Blob ، یک ArrayBuffer یا و ArrayBufferView باشد.

const messageBox = document.querySelector('#messageBox');
const sendButton = document.querySelector('#sendButton');

// Send a simple text message when we click the button
sendButton.addEventListener('click', event => {
    const message = messageBox.textContent;
    dataChannel.send(message);
})

همتای راه دور با گوش دادن به رویداد message ، پیام های ارسال شده در یک RTCDataChannel را دریافت می کند.

const incomingMessages = document.querySelector('#incomingMessages');

const peerConnection = new RTCPeerConnection(configuration);
const dataChannel = peerConnection.createDataChannel();

// Append new messages to the box of incoming messages
dataChannel.addEventListener('message', event => {
    const message = event.data;
    incomingMessages.textContent += message + '\n';
});