Firefox не позволяет запускать ненадежные каналы данных WebRTC? - PullRequest
0 голосов
/ 31 августа 2018

В этом примере я использую simple-peer, хотя я тестировал и другие реализации, а также мою собственную. Это похоже на проблему с созданием каналов данных.

Пример со страницы github simple-peer был немного изменен и использован: https://github.com/feross/simple-peer

var init = location.hash === '#1';
var config = {reliable:true, maxRetransmits:0, ordered:false};

var p = new SimplePeer({ initiator: init, trickle: false, channelConfig: config })
console.log(p);
p.on('error', function (err) { console.log('error', err) })

p.on('signal', function (data) {
  console.log('SIGNAL', JSON.stringify(data))
  document.querySelector('#outgoing').textContent = JSON.stringify(data)
})

document.querySelector('form').addEventListener('submit', function (ev) {
  ev.preventDefault()
  p.signal(JSON.parse(document.querySelector('#incoming').value))
})

p.on('connect', function () {
  console.log('CONNECT')
  console.log(p);
  console.log(p._channel);
  if(init){
    for(let i=0;i<100;i++){
        p.send(JSON.stringify(i));
    }
  }
})

var rec = 0;
p.on('data', function (data) {
  rec++;
  console.log('data: ' + JSON.parse(data));
  if(!init){
     p.send(data);
  }
  if(rec >= 100){
    console.log("got all");
  }
})

При инициации соединения с использованием Firefox (61.0.2 x64) соединение становится надежным, даже при попытке установить его как ненадежное с использованием ненадежного: ложного, упорядоченного: ложного и maxRetransmits: 0. Только упорядоченное свойство используется правильно. При проверке объекта подключения параметры maxRetransmits и maxRetransmitTime не отображаются. Если вы подключаетесь к Firefox через Chrome, для maxRetransmits и maxRetransmitTime в Chrome будет установлено значение 65535.

Если вы инициируете соединение с помощью Chrome и подключаетесь с помощью Firefox, соединение будет открыто как неупорядоченное и ненадежное как в Chrome, так и в Firefox, а также с 0 maxRetransmits в Chrome.

Это ошибка, или я что-то упустил при настройке соединения для поддержки ненадежных каналов данных при инициализации соединения с помощью браузера Firefox?

1 Ответ

0 голосов
/ 01 октября 2018

Да, это очень прискорбная ошибка в отслеживаемом Firefox здесь , которая приводит к игнорированию 0 значений как для maxRetransmits, так и maxPacketLifeTime. Это было исправлено в Firefox 62. Если вам нужно поддерживать Firefox <62, вы можете обойти это, установив <code>maxPacketLifeTime в 1. Но вы должны делать это только в Firefox, так как более старые версии Chrome не поддерживают maxPacketLifeTime. Да, это беспорядок.

Обратите внимание, что в словаре RTCDataChannelInit нет члена reliable. В интерфейсе RTCDataChannel также отсутствует атрибут maxRetransmitTime. Оба были удалены очень давно.

...