2015-01-13 17 views
0

我正在使用RTC數據通道每隔100ms(使用超時)在兩個對等端(chrome瀏覽器,一個windows pc或其他mac)之間傳輸數據(大約200kb)。RTC數據通道的不穩定行爲

由於某種原因,突然無故通常,大約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); 
}; 

有一些已知的錯誤,是造成這一點,還是因爲我大量的數據從兩個同齡人在同一個頻道在同一時間傳送?


EDIT

顯然,我使用兩個datachannels(一個用於在每個方向上的傳輸),當餘改變爲單個信道。它停止工作更快。

這是怎麼回事聽起來很蠢,但是當我清除控制檯(在chrome瀏覽器)上的瀏覽器數據的接收停止幾乎立即(但誒機還是接收數據)。

+0

我會說這是一個錯誤,我會報告給相應的瀏覽器供應商。 –

+0

同意 - 向Chrome報告。在Firefox中進行嘗試(每晚,也許是一個調試版本),如果是這樣,你可以通過NSPR_LOG_MODULES = datachannel:5,sctp:5,timestamp獲得調試 - 這也可以讓你通過icky將SCTP數據包轉儲到wireshark別名:(tcsh別名):alias log2pcap'grep「SCTP_PACKET」\ !: 1 | text2pcap -D -n -1248 -t「%H:%M:%S」。 - \ !: 2' – jesup

回答

0

Chrome中存在一個錯誤(實際上是usrsctp lib),它錯誤地處理了16位序列計數器的包裝,如果它發生在更長的消息中。它現在已經修復 - 所以值得再次嘗試一下你的代碼。 請參閱: Chromium issue 664283