استاندارد 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';
});