2016-05-19 87 views
2

我正在使用WebRTC技術進行一些測試,但在Chrome和Firefox之間RTCDataChannel存在一些問題。連接工作正常,我可以在兩個瀏覽器之間發送數據,但問題出現在兩個斷開連接之一時。RTCDataChannel.send Firefox問題

當Chrome發送數據並且Firefox接收數據並且Firefox斷開連接時,Chrome端的通道將其readyState設置爲關閉,並且我可以處理該消息以顯示消息。

當Firefox發送數據並且Chrome接收數據並且Chrome斷開連接時,Firefox端的通道不更改其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設置爲關閉並且不能發送消息),'此處處理錯誤'中的代碼會執行,但在Firefox中不會執行。

有人可以幫助我嗎?這有點令人沮喪。 謝謝!

回答

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

+0

我試過你的代碼但不工作。我的問題是,即使其他用戶關閉了頻道,channel.readyState也始終處於「打開」狀態。所以,執行總是進入「case」打開'「:( – AliMola

+0

目前我使用Windows 10,Firefox 46.0.1和Chrome 51.0.2704.63。請告訴我你的操作系統版本和瀏覽器版本 – Andrej

+0

我使用的是Mac OSX El Capitan與Chrome 50.0.2661.102(64位)和Firefox 46.0.1 – AliMola

0

呼叫RTCDataChannel.close()方法在接收端測試成功。

+0

目前關閉的方法被接收方調用,問題在於發件人不知道該通道已關閉,因爲他的readyState var始終處於「打開」狀態: ( – AliMola

+0

我沒有任何想法:(請告訴我,如果你已經解決了你的問題 – Andrej