Firefox 不允许启动不可靠的 WebRTC 数据通道?
Firefox does not allow initiating unreliable WebRTC dataChannels?
在这个例子中,我使用的是简单对等点,尽管我已经用其他实现以及我自己的实现进行了测试。这似乎是创建数据通道的问题。
simple-peergithub页面中的示例稍作修改并使用: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) 启动连接时,连接被强制可靠,即使尝试使用 unreliable:false、ordered:false 和 [=24= 将其设置为不可靠时也是如此].只有有序的属性才被正确使用。
检查连接对象时,不会公开 maxRetransmits 和 maxRetransmitTime 设置。如果您使用 Chrome 连接到 Firefox 连接,maxRetransmits 和 maxRetransmitTime 都将在 Chrome.
中设置为 65535
如果您使用 Chrome 启动连接并使用 Firefox 连接,则连接将在 Chrome 和 Firefox 中以无序和不可靠的方式打开,并且在 [=25] 中的 maxRetransmits 为 0 =].
这是一个错误,还是我在使用 Firefox 浏览器启动连接时设置连接以支持不可靠的数据通道时遗漏了什么?
是的,这是 Firefox 中跟踪的一个非常不幸的错误 here that leads to 0
values being ignored for both maxRetransmits
and maxPacketLifeTime
. It has been fixed in Firefox 62. If you have to support Firefox < 62, you can work around this by setting maxPacketLifeTime
to 1
. But you should only do this in Firefox since older Chrome versions do not support maxPacketLifeTime
。是的,一团糟。
请注意 RTCDataChannelInit
dictionary. There is also no maxRetransmitTime
attribute on the RTCDataChannel
interface 中没有 reliable
成员。两者都已被删除很久了。
在这个例子中,我使用的是简单对等点,尽管我已经用其他实现以及我自己的实现进行了测试。这似乎是创建数据通道的问题。
simple-peergithub页面中的示例稍作修改并使用: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) 启动连接时,连接被强制可靠,即使尝试使用 unreliable:false、ordered:false 和 [=24= 将其设置为不可靠时也是如此].只有有序的属性才被正确使用。 检查连接对象时,不会公开 maxRetransmits 和 maxRetransmitTime 设置。如果您使用 Chrome 连接到 Firefox 连接,maxRetransmits 和 maxRetransmitTime 都将在 Chrome.
中设置为 65535如果您使用 Chrome 启动连接并使用 Firefox 连接,则连接将在 Chrome 和 Firefox 中以无序和不可靠的方式打开,并且在 [=25] 中的 maxRetransmits 为 0 =].
这是一个错误,还是我在使用 Firefox 浏览器启动连接时设置连接以支持不可靠的数据通道时遗漏了什么?
是的,这是 Firefox 中跟踪的一个非常不幸的错误 here that leads to 0
values being ignored for both maxRetransmits
and maxPacketLifeTime
. It has been fixed in Firefox 62. If you have to support Firefox < 62, you can work around this by setting maxPacketLifeTime
to 1
. But you should only do this in Firefox since older Chrome versions do not support maxPacketLifeTime
。是的,一团糟。
请注意 RTCDataChannelInit
dictionary. There is also no maxRetransmitTime
attribute on the RTCDataChannel
interface 中没有 reliable
成员。两者都已被删除很久了。