我正在使用WebRTC技术进行一些测试,但是Chrome和Firefox之间的RTCDataChannel存在一些问题。连接工作正常,我可以在两个浏览器之间发送数据,但问题出现在两个断开连接之一。
当Chrome发送数据并且Firefox接收数据并且Firefox断开连接时,Chrome端的频道将其readyState设置为关闭,我可以处理此消息。
当Firefox发送数据并且Chrome接收数据并且Chrome断开连接时,Firefox端的频道 NOT CHANGES ITS readyState ,所以我无法处理这个问题,显然Firefox会继续向封闭频道发送数据?
我的代码很简单:
建立联系:
[...]
if(offerer){
channel = connection.createDataChannel("dataChannel", null);
setChannelEvents(channel);
connection.createOffer(myFunc, showError);
}else{
connection.ondatachannel = function(event){
channel = event.channel;
setChannelEvents(channel);
}
}
[...]
建立连接后可以发送消息:
[...]
try{
channel.send(message);
}catch(e){
//handle error here
[...]
}
[...]
正如我所说,当在Chrome channel.send(消息);返回错误(因为readyState被设置为关闭且无法发送消息)执行'handle error here'中的代码,但在Firefox中永远不会执行。
是的,有人能帮帮我吗?这有点令人沮丧。 谢谢!答案 0 :(得分:0)
试试我的代码:
switch (channel.readyState) {
case 'open':
channel.send(message);
break;
case 'closed':
console.log('channel.readyState = ' + channel.readyState);
//handle error here
break;
default:
console.error('channel.readyState = ' + channel.readyState);
}
我已成功通过Chrome和Firefox测试
答案 1 :(得分:0)
在接收方调用RTCDataChannel.close()方法。