javascript - RTCPeerConnection.createDataChannel() 和 RTCPeerConnection.onDataChannel() 的区别

标签 javascript html 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 个全双工 channel 。即调用 conn.send("message") 将导致 onmessage1 但调用 conn2.send("message") 将导致 onmessage2。这是正常行为还是我的设置有问题?

为了获得一些额外信息,我正在使用 Chrome42 和 adapter.js 进行测试

最佳答案

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

* 请注意,您可以创建“协商的”数据通道。每个数据通道都有一个id;您可以简单地手动为您的数据通道分配一个 id。如果双方都打开一个具有相同 id 的数据通道,则他们不需要“协商”它并且可以简单地假设另一端正在收听相同的 channel 。但在实践中,我发现这是片状的。

关于javascript - RTCPeerConnection.createDataChannel() 和 RTCPeerConnection.onDataChannel() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29790784/

相关文章:

javascript - Firefox webRTC 屏幕共享通过代码启用标志

javascript - CustomFieldValidator ClientValidationFunction 未触发且没有错误

javascript - 单击提交后平滑滚动到 DIV

c# - 多个 html 类与 c#

WebRTC,冰候选人连接

javascript - 如何在 PeerJs peer.call(id, stream, [options]) 函数中设置元数据?

javascript - 经过一些计算后对输入字段求和

javascript - 使用 Leapmotion 移动 DIV

javascript - 更改整个文档或窗口的默认选择行为

jquery - 是否可以有透明背景?