O padrão WebRTC também abrange uma API para o envio de dados arbitrários por uma
RTCPeerConnection
: Para isso, chame createDataChannel()
em uma
Objeto RTCPeerConnection
, que retorna um objeto RTCDataChannel
.
const peerConnection = new RTCPeerConnection(configuration);
const dataChannel = peerConnection.createDataChannel();
O peer remoto pode receber canais de dados detectando datachannel
no objeto RTCPeerConnection
. O evento recebido é do tipo
RTCDataChannelEvent
e contém uma propriedade channel
que representa o
RTCDataChannel
conectado entre os apps semelhantes.
const peerConnection = new RTCPeerConnection(configuration);
peerConnection.addEventListener('datachannel', event => {
const dataChannel = event.channel;
});
Abrir e fechar eventos
Antes que um canal possa ser usado para enviar dados, o cliente precisa esperar
até que sejam abertos. Isso é feito detectando o evento open
.
Da mesma forma, há um evento close
para quando um dos lados fecha o canal.
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;
});
Mensagens
Para enviar uma mensagem em um RTCDataChannel
, chame a função send()
.
com os dados que queremos enviar. O parâmetro data
dessa função pode ser
uma string, um Blob
, um ArrayBuffer
ou um 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);
})
O ponto remoto receberá as mensagens enviadas em um RTCDataChannel
ouvindo em
o evento message
.
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';
});