RTCPeerConnection: метод createDataChannel()
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.
Метод createDataChannel() интерфейса RTCPeerConnection создаёт новый канал, связанный с удалённым участником, по которому можно передавать любые типы данных. Это может быть полезно для передачи дополнительного контента, такого как изображения, файлы, текстовые сообщения, пакеты обновлений игр и так далее.
Если новый канал данных является первым, добавленным в соединение, переустановление связи запускается путём передачи события negotiationneeded.
Синтаксис
createDataChannel(label) createDataChannel(label, options)
Параметры
label-
Наименование канала, понятное для человека. Эта строка не может быть длиннее 65 535 байтов.
optionsНеобязательно-
Объект, содержащий конфигурационные параметры канала данных. Он может содержать следующие поля:
orderedНеобязательно-
Указывает, обязаны ли сообщения, отправленные по
RTCDataChannel, прийти к месту назначения в том же порядке, в котором они были отправлены (true), или им разрешено приходить в произвольном порядке (false).true maxPacketLifeTimeНеобязательно-
Максимальное время в миллисекундах, которое может потребоваться для попытки передачи сообщения в ненадежном режиме. Хотя это значение является 16-битным беззнаковым числом, каждый пользовательский агент может ограничить его любым максимальным значением, которое он сочтёт уместным.
null maxRetransmitsНеобязательно-
Максимальное количество попыток повторной передачи сообщения пользователем, которое не удалось с первого раза, в ненадежном режиме. Хотя это значение является 16-битным беззнаковым числом, каждый пользовательский агент может ограничить его любым максимальным значением, которое он сочтёт уместным.
null protocolНеобязательно-
Имя подпротокола, используемого в
RTCDataChannel, если таковой имеется; в противном случае — пустая строка ("").""Эта строка не может быть длиннее 65 535 байтов. negotiatedНеобязательно-
По умолчанию (
false) каналы данных согласовываются по каналу, где одна сторона вызываетcreateDataChannel, а другая сторона прослушивает событиеRTCDataChannelEventс помощью обработчика событияondatachannel. В качестве альтернативы (true) они могут быть согласованы вне канала, где обе стороны вызываютcreateDataChannelс заранее согласованным идентификатором.false idНеобязательно-
16-битный числовой идентификатор канала; допустимые значения — от 0 до 65 534. Если вы не укажете этот параметр, пользовательский агент выберет идентификатор за вас.
Примечание: Эти параметры представляют подмножество свойств RTCDataChannel интерфейса, которые можно задать с помощью скрипта.
Возвращаемое значение
Новый объект RTCDataChannel с указанным label, настроенный с помощью параметров, указанных в options , если этот параметр включён; в противном случае устанавливаются значения по умолчанию, перечисленные выше.
Исключения
-
InvalidStateErrorDOMException -
Выбрасывается, если
RTCPeerConnectionзакрыт. TypeError-
Выбрасывается в следующих ситуациях:
- Длина строки метки и/или протокола слишком велика; она не может быть больше 65 535 байтов (байты, а не символы).
- Значение
idравно 65535. Хотя это допустимое беззнаковое 16-битное значение, оно не является допустимым значением дляid.
-
SyntaxErrorDOMException -
Выбрасывается, если значения были указаны для обоих параметров
maxPacketLifeTimeиmaxRetransmits. Вы можете указать значение, отличное отnull, только для одного из них. -
ResourceInUseDOMException -
Выбрасывается, если был указан
id, но другойRTCDataChannelуже использует это же значение. -
OperationErrorDOMException -
Выбрасывается, если указанный
idуже используется или если не был указанid, слой WebRTC не смог автоматически сгенерировать идентификатор, потому что все идентификаторы заняты.
Примеры
В этом примере показано, как создать канал данных и настроить обработчики событий open и message для отправки и получения сообщений по нему (для краткости в примере предполагается, что onnegotiationneeded настроен).
// Offerer side
const pc = new RTCPeerConnection(options);
const channel = pc.createDataChannel("chat");
channel.onopen = (event) => {
channel.send("Hi you!");
};
channel.onmessage = (event) => {
console.log(event.data);
};
// Answerer side
const pc = new RTCPeerConnection(options);
pc.ondatachannel = (event) => {
const channel = event.channel;
channel.onopen = (event) => {
channel.send("Hi back!");
};
channel.onmessage = (event) => {
console.log(event.data);
};
};
В качестве альтернативы можно использовать более симметричное согласование вне канала, используя согласованный идентификатор (0 здесь):
// Both sides
const pc = new RTCPeerConnection(options);
const channel = pc.createDataChannel("chat", { negotiated: true, id: 0 });
channel.onopen = (event) => {
channel.send("Hi!");
};
channel.onmessage = (event) => {
console.log(event.data);
};
Для более подробного примера, демонстрирующего, как создаётся соединение и канал, см. Пример использования RTCDataChannel.
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
createDataChannel |
24 | 79 | 22 | 15 | 11 | 25 | 24 | 14 | 11 | 1.5 | 4.4 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/createDataChannel