我使用RTC在两个对等点(两个铬浏览器,一个windows n另一个mac)之间传输数据(关于200kb) --每个100ms(使用超时)。
由于某种原因,突然间无缘无故,一般在大约5分钟后,一个对等点停止接收数据,再过一段时间,另一个对等点也停止接收数据。
经过大量的调试,我发现两个节点仍然在传输数据,通过网络流量分析,可以清楚地看到另一台机器正在接收数据,但浏览器不调用channel.onmessage。
我的代码之一是:
function timepot1(){ // I have cheked, this keeps getting called, no problem here
try {
....
channel.send(JSON.stringify(jsObject));
}catch (err) {
console.log(err);
}
setTimeout(timepot1, 100);
};是否有一些已知的错误导致了这种情况,还是因为我同时在同一通道上从两个对等点传输大量数据?
编辑
显然,我使用了两个数据环(一个用于每个方向的传输),当我更改为单通道时。它很快就停止工作了。
这听起来很愚蠢,但是当我清除控制台(在chrome浏览器中)时,该浏览器上的数据接收几乎立即停止(但是eh机器仍然接收数据)。
发布于 2017-03-25 09:06:58
Chrome (实际上是usrsctp )中有一个错误,如果它发生在一条较长的消息中,它会错误地处理16位序列计数器的包装。它现在是固定的-所以值得再次尝试您的代码。请参阅:铬问题664283
https://stackoverflow.com/questions/27919110
复制相似问题