RTCPeerConnection.createDataChannel()和RTCPeerConnection.onDataChannel()之间的区别

时间:2015-04-22 07:37:03

标签: javascript html5 webrtc

我最近一直在玩webRTC,并且正在创建一个抽象层,以便通过网状网络架构轻松获得多个客户端通信。

我的问题是关于创建数据通道。目前我做了以下事情:

var pc = new RTCPeerConnection(null, {optional: []});

var conn = pc.createDataChannel("testchannel", {});
var conn2 = null;
conn.onmessage = function(evt){
    console.log("onmessage1");
};

pc.ondatachannel = function (event) {
    conn2 = event.channel;
    event.channel.onmessage = function(evt){
        console.log("onmessage2");
    };
};

这导致在2个客户端之间打开2个全双工通道。即调用conn.send("message")将导致onmessage1,但调用conn2.send("message")将导致onmessage2。这是正常行为还是我的设置有问题?

有关额外信息,我正在使用带有adapter.js

的Chrome42进行测试

1 个答案:

答案 0 :(得分:3)

数据通道确实是双向的;您只需要为两个对等点创建一个数据通道即可进行通信。正如初始RTC连接需要*由一个对等方发送要约和另一个对象创建一样,数据通道需要由一个对等方打开而另一个可以在ondatachannel中锁定它。然后,两者都将使用该数据通道的sendon message进行通信。

*请注意,您可以创建"协商"数据通道。每个数据通道都有一个id;您只需手动为您的数据通道分配ID即可。如果两个对等体都打开具有相同ID的数据通道,则他们不需要"协商"它可以简单地假设另一端正在收听同一个频道。在实践中,我发现这是不稳定的。