我最近一直在玩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进行测试答案 0 :(得分:3)
数据通道确实是双向的;您只需要为两个对等点创建一个数据通道即可进行通信。正如初始RTC连接需要*由一个对等方发送要约和另一个对象创建一样,数据通道需要由一个对等方打开而另一个可以在ondatachannel
中锁定它。然后,两者都将使用该数据通道的send
和on message
进行通信。
*请注意,您可以创建"协商"数据通道。每个数据通道都有一个id;您只需手动为您的数据通道分配ID即可。如果两个对等体都打开具有相同ID的数据通道,则他们不需要"协商"它可以简单地假设另一端正在收听同一个频道。在实践中,我发现这是不稳定的。